Я столкнулся с проблемой, когда мне понадобился пользовательский геттер с ванильным сеттером.Проблема возникает, когда я пытаюсь установить атрибут в подклассе __init__
.Если я поставлю super
__init__
последним, он заменит набор в классе Child
.
Очевидно, что при запуске super
он __init__
сначала решает проблему, и я поместил assert
в Parent
setx
, чтобы убедиться, что _x уже инициализирован.
Мой вопрос: делаю ли я что-то явно не так?Утверждение в сеттере кажется мне неуклюжим.
Примечание: ранее я не инициализировал _x в инициализации, пока Пилинт не заорал на меня.
class Parent(object):
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
#assert hasattr(self,'_x')
self._x = value
x = property(getx, setx)
class Child(Parent):
def __init__(self, x):
self.x = x
super(Child, self).__init__() # sets x to None
if __name__ == '__main__':
p = Parent()
p.x = 123
print p.x # prints 123
c = Child(321)
print c.x #prints None