私には2つのクラスがField
ありBackground
ます。彼らは少しこのように見えます:
class Field( object ):
def __init__( self, a, b ):
self.a = a
self.b = b
self.field = self.buildField()
def buildField( self ):
field = [0,0,0]
return field
class Background( Field ):
def __init__( self, a, b, c ):
super(Background, self).__init__( a, b )
self.field = self.buildField( c )
def buildField( self, c ):
field = [c]
return field
a, b, c = 0, 1, 2
background = Background( a, b, c )
このエラーはフィールドを指していますbuildField()
:
"TypeError: buildField() takes exactly 2 arguments (1 given)."
私はBackgroundinit ()が最初に呼び出されることを期待していました。「a、b」をFields init()に渡すには、Fieldでaとbを割り当て、次に3つの0を含むリストをfieldに割り当てます。次に、Backgroundのinit()を続行するには、独自のbuildField()を呼び出し、cを含むリストでself.fieldをオーバーライドします。
super()を完全には理解していないようですが、Webやこのあたりで同様の継承の問題を調べた後、問題の解決策を見つけることができませんでした。
クラスが継承されたメソッドをオーバーライドできるc++のような動作を期待していました。どうすればこれまたは類似のものを達成できますか。
これに関連して私が見つけたほとんどの問題は、二重アンダースコアを使用している人々でした。スーパーでの継承に関する私の経験では、継承されたクラスinit()を使用して、さまざまな変数をスーパークラスに渡すだけです。何も上書きする必要はありません。