Установка свойства Super в подклассе '__init__ - PullRequest
0 голосов
/ 27 января 2011

Я столкнулся с проблемой, когда мне понадобился пользовательский геттер с ванильным сеттером.Проблема возникает, когда я пытаюсь установить атрибут в подклассе __init__.Если я поставлю super __init__ последним, он заменит набор в классе Child.

Очевидно, что при запуске super он __init__ сначала решает проблему, и я поместил assert в Parent setx, чтобы убедиться, что _x уже инициализирован.

Мой вопрос: делаю ли я что-то явно не так?Утверждение в сеттере кажется мне неуклюжим.

Примечание: ранее я не инициализировал _x в инициализации, пока Пилинт не заорал на меня.

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 голосов
/ 27 января 2011

Я бы лично предпочел следующее решение:

class Parent(object):
    def __init__(self, x=None):
        self._x = x

class Child(Parent):
    def __init__(self, x):
        super(Child, self).__init__(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...