我知道那裏有一堆類似的問題。但我的問題是不同的。 我不想做出不能被覆蓋的方法。 我想保護我新創建的類不會無意中重寫某些內容。如何在Python中不小心重寫一個方法?
使用下劃線作爲前綴是相當不錯的,但很快我會得到很多帶有很多下劃線的方法。並在我的繼承類中的某個地方,我會覆蓋祖先的類方法。
我真正想要的是如此簡單的東西:
class Cat(Mammal):
def walk(self):
if ancestor_has_function('walk'):
parent.walk();
do_something_here();
如果任何貓的祖先(無論它是哺乳動物,動物,或生命形式)已經「走」的方法,那麼父類的方法應該是首先執行。
是否有可能在Python中做到這一點?
編輯: 例如,這是我認爲好的答案的簡歷。希望這將有助於其他人:
class Animal(object):
pass
#def walk(self):
# print('animal walk')
class Mammal(Animal):
def walk(self):
if hasattr(super(Mammal, self), 'walk') and callable(super(Mammal,self).walk):
super(Mammal, self).walk()
print('mammal walk')
class Cat(Mammal):
def walk(self):
super(Cat, self).walk()
print('cat walk')
if __name__ == '__main__':
cat = Cat()
cat.walk()
這裏是輸出:
哺乳動物步行
貓步
嘗試以取消動物的走法,你將有它也可以工作。
@Piet有它。不要有條件地重寫方法 - _always_覆蓋它們,並用'super()'調用原始方法。 – katrielalex
@katrielalex「動物」類可以有或沒有「走」的方法。假設它作爲第三方庫,你不能確定它是否有某種方法,你會看到爲什麼'條件語句'是必要的。 – goFrendiAsgard