Подтвердить что ты не робот

Переопределение методов родительского класса

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

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 contract.

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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