Überschreiben der Methoden einer Elternklasse
Etwas, das ich sehe Menschen, tun, die ganze Zeit ist:
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.
Etwas, das ich nie sehen, Menschen tun ist:
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.
Ist dies, weil ich Hänge mit den falschen Programmierer, oder ist es für einen guten Grund?
InformationsquelleAutor der Frage orokusaki | 2010-09-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde argumentieren, dass ausdrücklich die Rückkehr der Rückgabewert der super-Klasse-Methode ist klüger (außer in dem seltenen Fall, wo das Kind will, es zu unterdrücken). Vor allem, wenn Sie noch nicht genau wissen, was Sie super macht. Vereinbart, in Python können Sie in der Regel sehen die super-Klasse-Methode und erfahren Sie, was es tut, aber trotzdem.
Natürlich die Menschen, die schrieb die andere version könnte geschrieben haben, die die übergeordnete Klasse selbst und/oder bekannt ist, dass es keinen Rückgabewert hat. In diesem Fall hätten Sie beschlossen, zu verzichten und explizite return-Anweisung.
InformationsquelleAutor der Antwort Manoj Govindan
In dem Beispiel, geben Sie die übergeordnete Klasse Methode hat keine explizite return-Anweisung, und so ist wieder Keiner. Also in diesem einen Fall gibt es keine unmittelbare Problem. Beachten Sie aber, dass sollte sich jemand ändern, dass ein Elternteil einen Wert zurückgeben den wir jetzt wohl ändern müssen jedes Kind.
Ich denke, dass dein Vorschlag korrekt ist.
InformationsquelleAutor der Antwort djna
Ich würde vermuten, dass, zumindest in diesem Fall, da die übergeordnete Funktion nichts zurückgibt, gibt es keinen Punkt in der Rückkehr das Ergebnis. Im Allgemeinen jedoch, wenn die parent-Funktion nicht etwas zurückgeben, ich denke, es ist eine feine übung.
Wirklich, ob Sie nicht wieder, was die super-Klasse tut hängt davon ab, was Sie genau möchten Sie den code zu tun. Tun Sie es, wenn es das ist, was Sie wollen und was angemessen ist.
InformationsquelleAutor der Antwort JoshD