您只是不能将任意参数(无论是位置参数还是命名参数)传递给一个同样任意的超类(即“在
mro
不管当前的叶类型是什么,大多数类型和类都不接受任意参数,这也是很好的理由
Zen of Python
,
Errors should never pass silently.
Unless explicitly silenced.
在大多数情况下,打电话
int(name='booga')
将
当然是个错误。
class Super
为了能够“传递”任意参数,您还必须确保在它之后用作基的所有类都可以处理它——例如,
int
class Sub
从推卸责任中继承
Super
int,必须输入,例如:
class Int(int):
def __new__(cls, *a, **k):
return int.__new__(Int, a[0] if a else 0)
请注意,您必须覆盖
__new__
,
不
__init__
也
覆盖后者,但无论如何都不相关):
是不可变的,因此必须将值设置为
__新建__
现在
,比如
>>> class X(Super, Int): pass
...
>>> X(23, za='zo')
23
>>>
工作。但请注意
X
必须从子类
Int
__新建__
-消毒版
内景
),
不
从
内景
__新建__
!-)