Определение
def __init__(self):
self.foo = 5
в Base
делает foo
членом (атрибутом) экземпляра , а не класса. Класс Base
не знает foo
, поэтому нет способа получить к нему доступ с помощью вызова super()
.
Это не обязательно, однако. Когда вы воплощаете
foobar = Derived()
и метод __init__()
базового класса вызывают
self.foo = 5
это не приведет к созданию / перезаписи атрибута, но вместо этого вызовет установщик Derived
, что означает
self.foo.fset(5)
и, следовательно, self._foo = 5
. Так что если вы поставите
return 1 + self._foo
в своем геттере вы в значительной степени получаете то, что хотите. Если вам нужно значение, установленное self.foo
в конструкторе Base
, просто посмотрите на _foo
, который был правильно установлен @foo.setter
.