Метод против функции в случае простой функции - PullRequest
1 голос
/ 10 сентября 2010

У меня есть оригинальный класс (DownloadPage), и мне нужно добавить только одну простую функциональность (get_info). Какой подход лучше в ООП?

def get_info(page):  # make simple function
    ...
result = get_info(DownloadPage())

или

class MyDownloadPage(DownloadPage):   # make new class with inheritance
    def get_info(self):               # with one method
        ...

result = MyDownloadPage().get_info()

Спасибо

Ответы [ 3 ]

3 голосов
/ 10 сентября 2010

Ответ действительно зависит от того, хотите ли вы, чтобы функция / метод get_info могла функционировать не на MyDownloadPage, а на других вещах.В настоящее время я бы пошел с бесплатной функцией, но когда требования соединились так или иначе, должно быть достаточно легко преобразовать ваше решение в любом случае.

(я предпочитаю бесплатную функцию, потому что она не ограничиваетчто может быть передано ему, и любая функциональность, которая полагается только на открытый интерфейс другого объекта, должна быть функцией, уменьшающей связь.)

2 голосов
/ 10 сентября 2010

Поскольку расстояние от одного решения до другого мало, оно вряд ли будет иметь значение для одной функции.

Как только у вас появятся две функции, я бы сказал, что производный класс более удобен в обслуживании.

Как только две функции захотят поделиться общим значением, таким как регистратор или переменная конфигурации, вы увидите больше преимуществ.

1 голос
/ 11 сентября 2010

Это может быть еретическим, почему бы просто не добавить его как метод к существующему классу?

def get_info(self):
    ...

DownloadPage.get_info = get_info

Я понимаю, что это не совсем стандартная практика, но мне было бы интересно услышать Pythonэксперты объясняют, почему нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...