在子类的__init__中设置超类的属性
我遇到一个问题,需要一个自定义的获取器和一个普通的设置器。问题出现在我尝试在子类的 __init__
方法中设置属性时。如果我把 super
的 __init__
放在最后,它会覆盖 Child
类中的设置。
显然,如果先运行 super
的 __init__
,就能解决这个问题。我在 Parent
类的 setx
方法中加了一个 assert
,以确保 _x 已经被初始化。
我想知道我是不是做错了什么。把 assert
放在设置器里让我觉得有点别扭。
注意:我之前没有在初始化时初始化 _x,直到 pylint 提醒我。
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
1 个回答
4
我个人更喜欢下面这个解决方案:
class Parent(object):
def __init__(self, x=None):
self._x = x
class Child(Parent):
def __init__(self, x):
super(Child, self).__init__(x)