Наследование: у объекта 'super' нет атрибута - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь создать фабрику, которая будет создавать объект, который использует переменные экземпляра из родительского класса.Разве родительский класс не инициализируется для создания дочернего класса?Я думал, что добавление super().__init__ в дочерний класс '__init__() может исправить это, но это не так.

Если вместо переменных экземпляра я использовал переменные класса в родительском классе, эта ошибка не возникает, но я нене хочу обмениваться данными между дочерними экземплярами.

Есть ли способ исправить это?

class factory:

  @staticmethod
  def fact(type):

   if type is "A": return child_A()

   if type is "B": return child_B()

class parent:

  def __init__(self):
    self.attr1 = []
    self.attr2 = []

class child_A(parent):

  def __init__(self):
    self.data = [super().attr1, super().attr2]

class child_B(parent):

  def __init__(self):
    self.data = [super().attr1, super().attr2]

1 Ответ

0 голосов
/ 13 мая 2018

Я был близко. К родительским атрибутам обращается дочерний класс с self вместо super(). Сначала нужно создать экземпляр родительского класса.

class factory:

  @staticmethod
  def fact(type):

  if type is "A": return child_A()

  if type is "B": return child_B()

class parent:

  def __init__(self):
    self.attr1 = []
    self.attr2 = []

class child_A(parent):

  def __init__(self):
    super().__init__()
    self.data = [self.attr1, self.attr2]

class child_B(parent):

  def __init__(self):
    super().__init__()
    self.data = [self.attr1, self.attr2]
...