Python继承中调用父类__init__报错,super却正常,原因是什么?
TypeError: Parent.init() missing 1 required positional argument: 'name' 原因解析
当直接通过父类名Parent调用__init__方法时,这个方法是未绑定到具体实例的普通函数,不会自动把当前子类的实例(也就是self)传递进去。
父类Parent的__init__方法定义要求两个参数:第一个是self(代表实例本身),第二个是name。你的代码里写了Parent.__init__(name),相当于把name当成第一个参数传给了self,而真正需要的name参数完全没传,所以Python报错提示缺少必填的name参数。
如果要直接用父类名调用__init__,必须手动传入当前子类的实例self,修改后代码即可正常运行:
class Child(Parent): def __init__(self, name): Parent.__init__(self, name)
而super().__init__(name)能正常运行的原因是,super()会返回一个代理对象,它在调用父类方法时会自动把当前子类的实例(self)传递给父类的__init__,你只需要传入除self之外的其他参数(这里就是name)即可。
内容的提问来源于stack exchange,提问作者Aashif Ali
相关产品推荐
相关产品推荐

