我有两个班,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)."
我希望首先调用Background init ()。将“a,b”传递给Fields init (),Field分配a和b,然后将一个包含三个0的列表分配给field。然后让Background 的init () 继续,然后调用它自己的buildField() 并用包含c 的列表覆盖self.field。
似乎我并不完全理解 super(),但是在查看了网络上和此处的类似继承问题后,我无法找到解决我的问题的方法。
我期望像 c++ 这样一个类可以覆盖继承的方法的行为。我怎样才能做到这一点或类似的东西。
我发现与此相关的大多数问题都是使用双下划线的人。我对 super 继承的经验是使用继承的类init () 将不同的变量传递给超类。没有涉及覆盖任何内容。