首页 > 解决方案 > AttributeError: 'super' object has no attribute – 通过多层继承调用基类方法

问题描述

在 Python 中进行多层继承时,如何调用“基类”方法?

例如

class A():
    def do_something(self):
        print('Class A')

class B(A):
    def do_something(self):
        super().do_something()
        print('Class B')

class C(B):
    def do_something(self):
        super().do_something()
        print('Class C')

class D(C):
    def do_something(self):
        super(A, self).do_something()
        print('Class D')

结果是:

>>> A().do_something()
Class A
>>> C().do_something()
Class A
Class B
Class C
>>> D().do_something()
AttributeError: 'super' object has no attribute 'do_something'

所需的行为将导致:

>>> D().do_something()
Class A
class D

我尝试使用A(self).do_something()in class D,但只要__init__指定 an ,这将失败TypeError: __init__() missing 3 required positional arguments: 'arg1', 'arg2', and 'arg3'

这个问题在 StackOverflow 上被问了很多,但似乎没有一个人能提供具体问题的答案,试图将调用委托给基类的函数。我有点困惑,因为我认为这种super(<target_class>, self)...行为适用于 Django 模型。

标签: pythonoop

解决方案


推荐阅读