Как получить родительскую переменную в Python

#python #inheritance

#python #наследование

Вопрос:

Не могли бы вы помочь мне с определением дочернего класса. Я хотел бы получить доступ к родительской переменной в дочернем классе

 class Parent:
   def __init__(self, p=None):
      self.p = p
      self.child = None

   def calc(self,):     
      self.child = Child('child')
  
class Child(Parent):
   def __init__(self, c=None):
      self.c = c
      self.print()

    def print(self,):
       print(self.c Parent.p) 


p = Parent('parent')
p.calc()
 

Он выдает исключение: ошибка атрибута: объект типа ‘Parent’ не имеет атрибута ‘p’

Ответ №1:

Вам нужно вызвать конструктор суперкласса, чтобы получить к нему доступ, так как вы переопределяете метод __init__ in Child , поэтому Parent он не будет вызван.

 class Child(Parent):
    def __init__(self, c=None):
        super().__init__()   # pass any arguments to parent __init__ here
        self.c = c
        self.print()
 

Комментарии:

1. Спасибо за ответ! Я допустил небольшую ошибку в коде, родительский класс имеет переменную self.p . Возможно, я полностью упускаю теорию, но то, что я хочу сделать, это просто пропустить создание другой идентичной переменной self.p в дочернем классе, просто используйте ее значение в дочернем классе. С помощью super().__init__(‘test’) я не получу ‘childparent’ в конце. Есть ли какое-либо другое решение?

2. Хорошо, итак Parent.p , в вашем определении это переменная класса, а не переменная экземпляра. Вы должны определить ее на уровне класса, а не в __init__ . Или вы можете сделать print(self.c Parent().p) , но тогда это будет None и, вероятно, не то, что вы хотите.