[英]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.