Переопределение методов родительского класса - PullRequest
19 голосов
/ 27 сентября 2010

Я вижу, что люди все время делают:

class Man(object):
    def say_hi(self):
        print('Hello, World.')

class ExcitingMan(Man):
    def say_hi(self):
        print('Wow!')
        super(ExcitingMan, self).say_hi()  # Calling the parent version once done with custom stuff.

То, чего я никогда не вижу, делают люди:

class Man(object):
    def say_hi(self):
        print('Hello, World.')

class ExcitingMan(Man):
    def say_hi(self):
        print('Wow!')
        return super(ExcitingMan, self).say_hi()  # Returning the value of the call, so as to fulfill the parent class's contract.

Это потому, что я вешаюсь со всемипрограммисты, или это не зря?

Ответы [ 3 ]

8 голосов
/ 27 сентября 2010

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

Конечно, люди, написавшие другую версию, могли написать родительский класс сами и / или знали, что он не имеет возвращаемого значения. В этом случае они решили бы обойтись без явного возврата.

5 голосов
/ 27 сентября 2010

В приведенном вами примере метод родительского класса не имеет явного оператора return и поэтому возвращает None.Так что в этом одном случае нет немедленной проблемы.Но учтите, что если кто-то из родителей модифицирует так, чтобы он возвращал значение, нам, вероятно, теперь нужно изменить каждого потомка.

Я думаю, что ваше предложение верно.

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

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

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

...