我有一個課程,是許多其他課程的超級課程。我想知道(在我的超一流的初始化()如果子類已覆蓋的具體方法如何檢測python中子類中的方法重載?
我試圖用一個類的方法來做到這一點,但結果是錯誤的:
class Super:
def __init__(self):
if self.method == Super.method:
print 'same'
else:
print 'different'
@classmethod
def method(cls):
pass
class Sub1(Super):
def method(self):
print 'hi'
class Sub2(Super):
pass
Super() # should be same
Sub1() # should be different
Sub2() # should be same
>>> same
>>> different
>>> different
有沒有什麼辦法了超一流的知道,如果一個子類已覆蓋的方法?
莫非你說幾句關於*爲什麼*你想這樣做? – NPE 2012-02-24 19:21:10
立即想到什麼,但是如果您爲方法添加文檔字符串,那麼當方法被覆蓋時,它們將被覆蓋。因此,您應該可以使用'MyClass.methodname .__ doc__'來跟蹤它。但我覺得這個解決方案很破解,這就是爲什麼我不把它作爲答案發布的原因 – inspectorG4dget 2012-02-24 19:21:50
基本上我想讓超類有這些方法定義爲'通',並有一個單獨的方法(實際上__init__)調用這些函數。我想讓init在打印語句中聲明我們正在開始或結束函數,但如果該函數仍然爲空,這些語句看起來不合適,我想廢除它們。 – Brian 2012-02-24 19:52:38