簡體   English   中英

在子類的__init__中設置Super的屬性

[英]Setting a Super's property in a Subclass' __init__

我遇到一個問題,我需要一個帶有香草二傳手的定制吸氣劑。 當我嘗試在子類的__init__設置屬性時,就會發生問題。 如果我將super__init__放在最后,它將覆蓋Child類中的集合。

顯然, super運行它的__init__首先解決了這個問題,我將一個assert放入Parentsetx ,以確保_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM