super () не имеет атрибута родительского метода - PullRequest
0 голосов
/ 26 февраля 2019

РЕДАКТИРОВАТЬ: эта ошибка относится к AWS Lambda

Здравствуйте, я не могу понять, почему я не могу вызвать метод родителя из дочернего метода.

У меня определен родительский классв classes/IDKKKK.py

class IDKKKK:
    def foobar(self, foo, bar):
        return { 'foo': foo, 'bar': bar}

    def foobar2(self, fo, ob, ar):
        return {'foobar': fo+ob+ar}

И у меня есть дочерний класс, определенный в classes/OMGGG.py

from classes.IDKKKK import IDKKKK

class OMGGG(IDKKKK):
    def childFoo(self):
        idc = {}
        return super().foobar(idc, super().foobar2('idk', ' what is ', 'going on'))

Я создаю экземпляр OMGGG, вызываю childFoo() и получаю super() has no attribute 'foobar' в моем main.py

from classes.OMGGG import OMGGG

omg = OMG()
print(omg.childfoo())

Я использую Python 3.7, поэтому super() должен работать, однако я попытался

super(OMGGG, self).foobar(...

безрезультатно.

Не совсем уверен, что я делаю не так.Я думаю, что я могу импортировать его неправильно?

Редактировать: кажется, я забыл добавить себя.Это была ошибка в переводе.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Ваш метод childFoo должен принимать self в качестве параметра:

def childFoo(self):
    ...
0 голосов
/ 26 февраля 2019

Вам не нужно использовать super().Просто используйте self.

from classes.IDKKKK import IDKKKK

class OMGGG(IDKKKK):
    def childFoo(self):
        idc = {}
        return self.foobar(idc, self.foobar2('idk', ' what is ', 'going on'))

Технически foobar и foobar2 также присутствуют в классе OMGGG, поскольку он наследует их от IDKKKK класса.

Также как @Для user2000783 и Olivier рекомендуется передать self в качестве параметра childFoo.

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