Форум сайта python.su
Добрый день, решил обратиться к помощи, а точнее к оценке моих навыков. В Python'е не новичок, но вот с ООП не дружил с того момента как открыл страницу с ознакомлением того самого ООП. Прошу вашего мнения относительно моего “кода”. Хочу узнать пошёл ли я правильной дорогой и стоит мне продолжать идти или же развернуться и вернуться к точке старта. На название переменных попрошу не обращать внимание, так как раздавал их рандомно знав что код будет недлинным.
from urllib.request import urlopen from bs4 import BeautifulSoup import re class Crawler: def __init__(self, url): url = urlopen(url) self.html = BeautifulSoup(url, 'lxml') self.list_of_sites = [] def run_crawling(self): result = self._crawling(self.html) return result def _crawling(self, html): k = 0 target = html.findAll('a', href=True) for url in target: checker = url['href'] compare = re.compile('http?://') if re.search(compare, checker): k += 1 self.list_of_sites.append(checker) if k > 0: return 'Done' def sites(self): return self.list_of_sites if __name__ == '__main__': obj1 = Crawler('http://www.imdb.com/') obj1.run_crawling() print(obj1.sites())
Отредактировано ZZZ (Сен. 15, 2017 23:12:03)
Офлайн
georgiy_ya0
По возможности прошу оценить мою работу по 10 бальной шкале.
>>> True True >>> isinstance(True, bool) True >>> isinstance(True, int) True >>> True + True 2 >>> (True).bit_length() 1 >>> (True).real 1 >>> (True).imag 0 >>>
Отредактировано py.user.next (Сен. 15, 2017 15:17:08)
Офлайн
py.user.next
Немного не в тему.
Зачем добавили super() класс если можно просто вызвать __init__ вручную? Или же это сахар?
Офлайн
georgiy_ya
Вам говорят про то, что ваш код не дает никаких преференций перед простым процедурным подходом. Когда у вас есть только один класс и вы его один раз инстанциируете, то это лищняя сущность по Оккаму. Сделайте то же самое без класса, и оно не станет хуже. Если вы хотите показать свои скиллы в ООП, вам нужна программа, в которой будет взаимодействие объектов, а не просто немного другая организация единиц кода в пространства имен.
Офлайн
FishHook
Тогда я попрошу вас оценить мой класс.
Офлайн
georgiy_ya
Вы опять нифига не поняли. Ваш класс великолепен, но бессмысленен. Какую задачу он решает? Что инкапсулирует? Ответьте на вопрос: чем ваш код с классом лучше аналогичного но без класса? Почему все методы не сделать просто функциями?
Офлайн
Вот как-то так…
Офлайн
FishHook
В том то собственно и дело, что я не совсем понимаю для чего необходимо пользоваться ООП. Я понимаю, что всё в Python'е объекты, то есть экземпляры классов, так? Значит когда мы что то создаём мы создаём всего лишь экземпляр какого то класса, так? А перегрузка операторов существует для применения различных операторов по разному для разных классов.
Сначало я думал, что классы необходимы для создания своего пространство имён (что-то между функцией и модулём, так сказать микропрограмма), потом я думал, что классы используется в основном лишь только в играх и в создании языков, так как всё остальное можно реализовать с помощью функций, после я думал, что они нужны для создания собственных типов данных (не знаю даже как это объяснить).
Я всё время хожу вокруг до около и никак не могу войти внутрь.
Я хочу задействовать ООП в своём коде, но не знаю как. У меня вечно чувство что я чего то недопонимаю в отношении классов и чтобы я не читал и не учил оно не проходит. Всё это дело ухудшает волна видео о классах на ютубе и отдельные книги про них самих, становится только хуже при их виде, так как создаётся ощущение что это что-то за пределами моих возможностей ( что-то космическое, недосягаемое).
Если есть книга, в которой подробно описывается:
- Когда необходимо прибегнуть к использованию классов
- Где необходимо использовать ООП
- Для чего было создано и используется ООП.
То прошу порекомендовать её мне. Только ненадо указывать мне на издания “O'Reilly” или того же самого лутца у которых в 300 страницах описывают кортежи, а в ещё 200 принцип их использования.
Отредактировано georgiy_ya (Сен. 15, 2017 21:59:14)
Офлайн
вообще в программировании надо пользоваться принципом А.П.Чехова - “если можешь не писать - не пиши”.
если ваш код выполняет поставленные задачи без классов - они вам не нужны.
здесь неплохо расписано
Офлайн
vic57
Хотел бы я не писать на них, но рано или поздно придётся, не буду же я всю жизнь на одних низкоуровневых языках сидеть. А за статью спасибо
Офлайн