[英]Setting a Super's property in a Subclass' __init__
我遇到一个问题,我需要一个带有香草二传手的定制吸气剂。 当我尝试在子类的__init__
设置属性时,就会发生问题。 如果我将super
的__init__
放在最后,它将覆盖Child
类中的集合。
显然, super
运行它的__init__
首先解决了这个问题,我将一个assert
放入Parent
的setx
,以确保_x已被初始化。
我的问题是我是否做错了明显的事情。 在二传手中断言对我来说很笨拙。
注意:之前我没有在init中初始化_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
我个人更喜欢以下解决方案:
class Parent(object):
def __init__(self, x=None):
self._x = x
class Child(Parent):
def __init__(self, x):
super(Child, self).__init__(x)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.