Как получить доступ к методу show в родительском классе из дочернего класса? - PullRequest
0 голосов
/ 28 сентября 2019
class Parent:
    def __init__(self):
        self.__num = 100

    def show(self):
        print("Parent:",self.__num)

class Child(Parent):  
    def __init__(self):
        self.__var = 10
    def show(self):
        super().show()
        print("Child:",self.__var)   

obj1 = Child()
obj1.show()

Файл "main.py", строка 12, в шоу
super (). Show ()
Файл "main.py", строка 6, в шоу
печать(«Parent:», self .__ num)
AttributeError: у дочернего объекта нет атрибута _Parent__num

Ответы [ 5 ]

1 голос
/ 28 сентября 2019
class Parent:
    def __init__(self):
        self.__num = 100

    def show(self):
        print("Parent:",self.__num)

class Child(Parent):  
    def __init__(self):
        super().__init__()  # Solution
        self.__var = 10

    def show(self):
        super().show()
        print("Child:",self.__var)   

obj1 = Child()
obj1.show()
1 голос
/ 28 сентября 2019

Вам необходимо инициализировать родительский экземпляр в вашем дочернем классе, потому что атрибут __num устанавливается только во время инициализации Parent, а не во время Child.

class Child(Parent):  
    def __init__(self):
        super().__init__()
        self.__var = 10
    def show(self):
        super().show()
        print("Child:",self.__var)   
0 голосов
/ 28 сентября 2019

, как уже говорилось в других ответах, вам нужно добавить super().__init__() к __init__ вашего дочернего класса.

, но также учтите, что есть нечто, называемое name mangling atработать здесь.прочитайте, например, 3.Двойное начальное подчеркивание: __var на этой странице .

короткая версия: если вы хотите использовать атрибут self.__num также в дочернем классе, вы должны переименовать его в self._num (только одно подчеркивание).

0 голосов
/ 28 сентября 2019

Измените своего ребенка. init на что-то вроде:

def __init__(self):
    self.__var = 10
    super().__init__()
0 голосов
/ 28 сентября 2019

Чтобы избежать переопределения, попробуйте это.

class Parent:
  def __init__(self):
    self.__num = 100

  def show(self):
     print("Parent:",self.__num)

class Child(Parent):  
  def __init__(self):
     Parent.__init__(self)
     self.__var=10
  def show1(self):
    print("Child:",self.__var)   

obj1 = Child()
obj1.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...