super()没有属性的父方法

时间:2019-02-26 17:21:06

标签: python oop aws-lambda

编辑:此错误特定于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 :(得分:3)

您的childFoo方法需要使用self作为参数:

def childFoo(self):
    ...

答案 1 :(得分:2)

您不需要使用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类中还存在foobar2OMGGG,因为它们是从IDKKKK类继承过来的。

同样@ user2000783和Olivier建议,也将self作为childFoo参数传递。