#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 и, вероятно, не то, что вы хотите.