我有以下类继承结构:
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中,构造函数中有两个参数,所以我有点困惑。我做错什么了
你的问题不在于
BattleStartEvent
的构造函数。它需要两个参数(除了self),这就是你传递给它的你的问题是,在所说的构造器中的行:
执行
super(BattleEvent, self)
实际上返回类BuffEvent
,该类接受一个参数,正如您看到的,您正在向它传递2要解决此问题,请执行以下操作之一:
修复^{} 调用以使用实际类本身,而不是父类(在所有类中):
在python3中:用“empty”super调用:
super().__init__(battle, buffable)
我猜这段代码只是用于一个可复制的示例,但是如果您的
__init__
实际上除了调用super
之外什么都不做,那么您可以省略它的实现,并且默认情况下将调用父级的__init__
有关
super
的更多有用信息,请参见Raymond Hettinger的Python’s super() considered super!相关问题 更多 >
编程相关推荐