我有以下类继承结构:
class BuffEvent(object):
def __init__(self, buffable):
self.buffable = buffable
class BattleEvent(BuffEvent):
def __init__(self, battle, buffable):
super(BuffEvent, self).__init__(buffable)
self.battle = battle
class BattleStartEvent(BattleEvent):
def __init__(self, battle, buffable):
super(BattleEvent, self).__init__(battle, buffable)
然后我尝试像这样调用 BattleStartEvent 的构造函数:
BattleStartEvent(battle, battle.attacker)
但我收到以下错误:
super(BattleEvent, self).__init__(battle, buffable)
TypeError: __init__() takes 2 positional arguments but 3 were given
在 BattleStartEvent 中,我的构造函数中有 2 个参数,所以我有点困惑。我在这里做错了什么?
您的问题不在于BattleStartEvent
. 它需要 2 个参数(除了 self),这就是你传递给它的。
那么你的问题是在上述构造函数中的那一行:
super(BattleEvent, self).__init__(battle, buffable)
这样做super(BattleEvent, self)
实际上会返回BuffEvent
带有一个参数的类,正如您所看到的,您正在将 2 传递给它。
要解决此问题,请执行以下任一操作:
修复您的super()
调用以使用实际类本身,而不是父类(在所有类中):
class BattleStartEvent(BattleEvent):
def __init__(self, battle, buffable):
super(BattleStartEvent, self).__init__(battle, buffable)
在 Python 3 中:使用“空”超级调用: super().__init__(battle, buffable)
我猜这个代码只是一个可重现的例子,但如果你__init__
实际上除了 call 什么都不做super
,你可以省略它的实现,__init__
默认情况下将调用父级。
有关 的更多有用信息super
,请参阅Python 的 super() 被视为超级!通过雷蒙德·赫廷格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句