2011-11-10 8 views
1

どのようにクラスメソッドをオーバーロードできますか?トレースバックだったPythonクラスのメソッドオーバーロード

class D(object): 
    def create(self): 
     foo = 100 
     bar = 'squirrels' 
     baz = 'I have %d insane %s in my head.' % (foo, bar) 
     return baz  

class C(D): 
    def create(self): 
     super(C, self).create() 
     baz = 'I have %s cute %s in my yard.' % (self.foo, self.bar) 

C().create() 

:あなたは、変数fooは、その関数のローカル変数であることを意味しself、上の変数を設定しない

AttributeError: 'C' object has no attribute 'foo' 

答えて

3

クラス属性としてローカル変数を使用しようとしました。以下の変更を行ってください:

class D(object): 
    def create(self): 
     self.foo = 100 
     self.bar = 'squirrels' 
     baz = 'I have %d insane %s in my head.' % (self.foo, self.bar) 
     return baz 

class C(D): 
    def create(self): 
     super(C, self).create() 
     print self.foo 
     self.baz = 'I have %s cute %s in my yard.' % (self.foo, self.bar) 

C().create() 
0

D.createではと は、私が失敗しました。

class D(object): 
    def create(self): 
     self.foo = 100 
     self.bar = 'squirrels' 
     self.baz = 'I have %d insane %s in my head.' % (self.foo, self.bar) 
     return self.baz 
+0

'create()'は 'D' respを返しません。 'C'オブジェクトですが、文字列です。だから '__init__'はおそらくどこかにつながっていないでしょう... – glglgl

+0

@glglglあなたは正しいです、答えは編集されました。 –

関連する問題