python - 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 模型。
解决方案
推荐阅读
- openxml - 如何将 Open XML 文档保存(和打开)为 Excel 文件?
- c# - 找不到类型或命名空间名称“ICloudRecoEventHandler”
- ssl-certificate - 空手道 - 如何从文件系统发送带有客户端证书的请求
- c# - 使用 Accord 框架的 C# 歪斜彩色图像
- python - 异步设计/实现
- sql - 结合两个查询并从结果中生成一个无重复列表
- c# - 如何使用 Javascript 将特定数据从 webgrid 传递到 MVC 控制器?
- python - 如何使用 Python 将多张图片对角线合并为一张图片
- sql-server - 将结构未知的表转换为键/值
- javascript - Chrome 不要求在服务器中允许位置