擴展父類的方法正確的方法,我經常做這樣的事情:什麼是現代的Python
class Person(object):
def greet(self):
print "Hello"
class Waiter(Person):
def greet(self):
Person.greet(self)
print "Would you like fries with that?"
線Person.greet(個體經營)看起來不正確。如果我改變了Waiter繼承的類別,我將不得不追蹤每一個這些類別並全部替換它們。
這是做現代Python的正確方法是什麼? 2.x和3.x,據我所知在這方面有變化3.
如果它關係任何我一般堅持單繼承,但如果額外的東西是必需的,以適應多重繼承正確,這將是很好的瞭解這一點。
這是3.x版本[super()]的文檔鏈接(http://docs.python.org/py3k/library/functions.html#super)。 – martineau 2011-05-20 11:07:38
只是爲了記錄,當在'super()'函數中引用'Waiter'時,不要使用類名,而要使用'self .__ class__'。這樣,您將不必重寫所有超級用戶,以免將來更改班級名稱。像這樣(在'Waiter.greet()')內:'super(self .__ class__,self).greet()'。 – 2017-07-13 21:18:09
我會注意到一個方法的基本實現通常不會調用super。因此,在多重繼承中,重寫方法的基類在MRO中比任何其他重寫方法更重要。這是mixin在基地之前被列出的規則的根源。如果只有一個基類,並且可以通過繼承樹的每個級別上最右邊的父級來訪問,則可以保證這種情況得到平凡的保證。例如,如果你在覆蓋一個Django類之後,最右邊的父母應該總是導致Django類。 – 2017-07-17 14:45:12