2017-09-22 125 views
0

使用超我得到一個錯誤的程序:混亂Python中

class TennisPlayer(): 
    def __init__(self, rank): 
     self.rank = rank 
    def slogan(self): 
     print("What Slogan!") 

class GrandSlamWinner(TennisPlayer): 
    def __init__(self, rank=0, slams=0): 
     TennisPlayer.__init__(self, rank) 
     self.slams = slams 
    def slogan(self): 
     super(GrandSlamWinner, self).slogan() 
     print("This: Are you serious!!") 

if __name__ == "__main__": 
    mcenroe = GrandSlamWinner(1,7) 
    print(mcenroe.slams) 
    mcenroe.slogan() 

我得到的錯誤:

Traceback (most recent call last): 
    File "subclassing.py", line 18, in <module> 
    mcenroe.slogan() 
    File "subclassing.py", line 12, in slogan 
    super(GrandSlamWinner, self).slogan() 
TypeError: super() argument 1 must be type, not classobj 

那麼,我們怎麼來覆蓋Python的超類的方法呢?

此外,是否有任何標準的方法來修改或添加到超類而子類化,如一套約定 - 例如,在子類的初始化函數中使用超類嗎?

乾杯!

+0

想必您使用的是Python 2.x,其中super不適用於舊式類。升級到3.x.並谷歌你的錯誤信息。 – jonrsharpe

+0

你忘了從'TennisPlayer'中的'object'繼承。 – user2357112

+0

@ user2357112我讀到這是隱含的。 – Rafael

回答

0

你只需要確保TennisPlayer類是一個新風格的類。

class TennisPlayer(object): 
    ... 
+0

所以,它不是在Python 2.x中隱含的? – Rafael