Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 15, 2017 14:02:06

georgiy_ya
Зарегистрирован: 2017-09-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Оцените ОО код.

Добрый день, решил обратиться к помощи, а точнее к оценке моих навыков. В 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())

Надеюсь на конструктивную критику или же адекватное мнение. По возможности прошу оценить мою работу по 10 бальной шкале.

Заметьте, оценивать нужно только мои объектно ориентированные способы написания кода.
Прошу помощи так как не знаю кто я в ООП.

Отредактировано ZZZ (Сен. 15, 2017 23:12:03)

Офлайн

#2 Сен. 15, 2017 15:01:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Оцените ОО код.

georgiy_ya
По возможности прошу оценить мою работу по 10 бальной шкале.
0

Класс сделать - это не ООП. ООП - это наследование, инкапсуляция и полиморфизм. И вот они уже реализуются с помощью классов. Вообще, под ООП понимается взаимодействие объектов между собой (программа в виде такого взаимодействия). Типа строка-объект с помощью операции-объекта взаимодействует со строкой-объектом. Или же матрица-объект взаимодействует с числом-объектом, где число объект-можно сохранить в матрице-объекте. А числа-объекты ещё и между собой могут взаимодействовать.

А у тебя ничего нет. Ты думал, ты class напишешь и оно в ООП превратится. Не, так не бывает.

Вот питон сам объектно-ориентированный. Можешь на него смотреть и учиться, как такое делать.
  
>>> 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)

Офлайн

#3 Сен. 15, 2017 17:01:24

georgiy_ya
Зарегистрирован: 2017-09-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Оцените ОО код.

py.user.next
Немного не в тему.
Зачем добавили super() класс если можно просто вызвать __init__ вручную? Или же это сахар?

Офлайн

#4 Сен. 15, 2017 17:16:42

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Оцените ОО код.

georgiy_ya
Вам говорят про то, что ваш код не дает никаких преференций перед простым процедурным подходом. Когда у вас есть только один класс и вы его один раз инстанциируете, то это лищняя сущность по Оккаму. Сделайте то же самое без класса, и оно не станет хуже. Если вы хотите показать свои скиллы в ООП, вам нужна программа, в которой будет взаимодействие объектов, а не просто немного другая организация единиц кода в пространства имен.



Офлайн

#5 Сен. 15, 2017 19:27:40

georgiy_ya
Зарегистрирован: 2017-09-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Оцените ОО код.

FishHook
Тогда я попрошу вас оценить мой класс.

Офлайн

#6 Сен. 15, 2017 19:35:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Оцените ОО код.

georgiy_ya
Вы опять нифига не поняли. Ваш класс великолепен, но бессмысленен. Какую задачу он решает? Что инкапсулирует? Ответьте на вопрос: чем ваш код с классом лучше аналогичного но без класса? Почему все методы не сделать просто функциями?



Офлайн

#7 Сен. 15, 2017 21:18:41

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Оцените ОО код.


Вот как-то так…



Офлайн

#8 Сен. 15, 2017 21:57:39

georgiy_ya
Зарегистрирован: 2017-09-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Оцените ОО код.

FishHook
В том то собственно и дело, что я не совсем понимаю для чего необходимо пользоваться ООП. Я понимаю, что всё в Python'е объекты, то есть экземпляры классов, так? Значит когда мы что то создаём мы создаём всего лишь экземпляр какого то класса, так? А перегрузка операторов существует для применения различных операторов по разному для разных классов.
Сначало я думал, что классы необходимы для создания своего пространство имён (что-то между функцией и модулём, так сказать микропрограмма), потом я думал, что классы используется в основном лишь только в играх и в создании языков, так как всё остальное можно реализовать с помощью функций, после я думал, что они нужны для создания собственных типов данных (не знаю даже как это объяснить).
Я всё время хожу вокруг до около и никак не могу войти внутрь.

Я хочу задействовать ООП в своём коде, но не знаю как. У меня вечно чувство что я чего то недопонимаю в отношении классов и чтобы я не читал и не учил оно не проходит. Всё это дело ухудшает волна видео о классах на ютубе и отдельные книги про них самих, становится только хуже при их виде, так как создаётся ощущение что это что-то за пределами моих возможностей ( что-то космическое, недосягаемое).

Если есть книга, в которой подробно описывается:
- Когда необходимо прибегнуть к использованию классов
- Где необходимо использовать ООП
- Для чего было создано и используется ООП.

То прошу порекомендовать её мне. Только ненадо указывать мне на издания “O'Reilly” или того же самого лутца у которых в 300 страницах описывают кортежи, а в ещё 200 принцип их использования.

Отредактировано georgiy_ya (Сен. 15, 2017 21:59:14)

Офлайн

#9 Сен. 15, 2017 22:20:41

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Оцените ОО код.

вообще в программировании надо пользоваться принципом А.П.Чехова - “если можешь не писать - не пиши”.
если ваш код выполняет поставленные задачи без классов - они вам не нужны.
здесь неплохо расписано

Офлайн

#10 Сен. 15, 2017 22:28:46

georgiy_ya
Зарегистрирован: 2017-09-15
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Оцените ОО код.

vic57
Хотел бы я не писать на них, но рано или поздно придётся, не буду же я всю жизнь на одних низкоуровневых языках сидеть. А за статью спасибо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version