Есть ли способ для дочерней функции, которая унаследует более одной родительской функции, для доступа ко всем родительским методам? - PullRequest
0 голосов
/ 06 августа 2020

Я получаю сообщение об ошибке при создании третьего класса, который наследует атрибуты первых двух классов. Функция первого класса будет go через, но при доступе к функции второго класса я получаю сообщение об ошибке:

class3' object has no attribute 'othernum

Вот код:

class class1():
    def __init__(self):
        self.number = 10000
    def getNum(self):
        return self.number
    
class class2():
    def __init__(self):
        self.othernum = 1111
    def displaynum(self):
        return self.othernum

class class3(class1, class2):
    pass

newperson = class3()
print(newperson.getNum())
print(newperson.displaynum())

Ответы [ 2 ]

1 голос
/ 10 августа 2020

Ответ, представленный @Ishaan Sathaye, действительно правильный. Но имейте в виду, что существует несколько механизмов для инициализации базовых классов в иерархии множественного наследования. См. Вызов родительского класса init с множественным наследованием, каков правильный путь? , в частности раздел с заголовком Все базовые классы предназначены для кооперативного наследования.

Итак, если бы ваши 3 класса были разработаны для совместного наследования, у нас было бы:

class class1():
    def __init__(self):
        super().__init__()
        self.number = 10000
    def getNum(self):
        return self.number

class class2():
    def __init__(self):
        super().__init__()
        self.othernum = 1111
    def displaynum(self):
        return self.othernum

class class3(class1, class2):
    def __init__(self):
        super().__init__()

newperson = class3()
print(newperson.getNum())
print(newperson.displaynum())
1 голос
/ 06 августа 2020

Нашел ответ.

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