繁体   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