2017-09-22 20 views
0

でスーパーを使用して、私はプログラムのエラーを取得しています:だから、どのように我々が想定している混乱は、Python

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でスーパークラスのメソッドをオーバーライドする:

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() 

私はエラーを取得しますか?

また、サブクラス化中にスーパークラスに変更や追加を行うための標準的な方法はありますか?サブクラスのinit関数内でスーパークラスをニアライズしますか?

乾杯!

+0

おそらく、古いスタイルのクラスではスーパーが動作しないPython 2.xを使用しています。 3.xにアップグレードします。そしてGoogleにあなたのエラーメッセージ。 – jonrsharpe

+0

あなたは 'TennisPlayer'で' object'から継承しています。 – user2357112

+0

@ user2357112私は暗黙のうちにそれを読んだ。 – Rafael

答えて

0

TennisPlayerクラスが新しいスタイルのクラスであることを確認するだけで済みます。

class TennisPlayer(object): 
    ... 
+0

だから、それはPython 2.xでは暗黙のことではありませんか? – Rafael