Python继承调用构造函数问题

加布里埃尔·斯洛姆卡

我有以下类继承结构:

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 传递给它。


要解决此问题,请执行以下任一操作:

  1. 修复您的super()调用以使用实际类本身,而不是父类(在所有类中):

    class BattleStartEvent(BattleEvent):
        def __init__(self, battle, buffable):
            super(BattleStartEvent, self).__init__(battle, buffable)
    
  2. 在 Python 3 中:使用“空”超级调用: super().__init__(battle, buffable)

  3. 我猜这个代码只是一个可重现的例子,但如果你__init__实际上除了 call 什么都不做super,你可以省略它的实现,__init__默认情况下将调用父级


有关 的更多有用信息super,请参阅Python 的 super() 被视为超级!通过雷蒙德·赫廷格。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使构造函数正确继承的问题

来自分类Dev

继承构造函数调用结果

来自分类Dev

构造函数调用问题

来自分类Dev

使用super()时未调用Python多继承构造函数

来自分类Dev

Python3.4多继承调用特定的构造函数

来自分类Dev

多重继承中的构造函数调用序列

来自分类Dev

Python-继承一个已初始化的类而不调用超级构造函数

来自分类Dev

Python-如何避免调用祖父母构造函数(多重继承)

来自分类Dev

python中的多个构造函数,使用继承

来自分类Dev

Python和构造函数中的多重继承

来自分类Dev

是在python中继承的构造函数吗

来自分类Dev

构造函数在继承的类python中失败

来自分类Dev

从构造函数调用可重写方法的问题

来自分类Dev

C ++隐式和显式继承构造函数调用

来自分类Dev

创建自定义构造函数而不直接调用继承

来自分类Dev

使用C ++在虚拟继承期间调用构造函数

来自分类Dev

C ++继承:在标头中调用基类构造函数

来自分类Dev

C ++继承:避免调用基类的默认构造函数

来自分类Dev

调用unique_ptr子类的继承的模板构造函数

来自分类Dev

使用虚拟继承时调用默认构造函数

来自分类Dev

c ++继承,构造函数真正的调用者

来自分类Dev

多级继承,无需调用超类构造函数

来自分类Dev

调用由多个类继承的类的构造函数

来自分类Dev

多级继承中复制构造函数的调用顺序是什么?

来自分类Dev

Python:继承和超级调用的问题

来自分类Dev

删除构造函数继承

来自分类Dev

继承构造函数与转发

来自分类Dev

继承Java构造函数

来自分类Dev

Javascript构造函数继承