У меня есть два класса: 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" в поля init(), поле, чтобы назначить a и b, затем назначить список с тремя 0 в нем в поле. Затем для Background init() продолжить, чтобы затем вызвать свой собственный buildField() и переопределить self.field со списком, содержащим c.
Кажется, я не полностью понимаю super(), однако мне не удалось найти решение моей проблемы после просмотра похожих проблем наследования в Интернете и здесь.
Я ожидал такого поведения, как С++, где класс может переопределить метод, который был унаследован. Как я могу достичь этого или чего-то подобного.
Большинство проблем, которые я нашел, связаны с тем, что люди используют двойные подчеркивания. Мой опыт с наследованием с супер заключается в использовании унаследованного класса init(), чтобы просто передать разные переменные суперклассу. Ничего не связано с перезаписью чего-либо.