Python类方法继承调用报错:Student.__init__缺失必选参数wand
问题原因解析
- 核心问题出在类方法的
cls参数绑定逻辑上:- 你在
Student的getstudent()里调用super().get(),本质是调用父类Wizard的get()类方法,但这个方法的cls参数会自动绑定为当前调用它的子类——也就是Student,而非Wizard本身。 - 当
Wizard.get()执行return cls(...)时,实际是在调用Student.__init__构造实例,但Student的构造方法要求必须传入wand参数,而Wizard.get()里只传入了Wizard构造所需的参数,缺少wand,所以触发参数缺失的报错。
- 你在
- 直接实例化
student1正常,是因为你手动传入了Student.__init__要求的所有参数,而通过类方法调用时,父类的类方法没有适配子类的构造参数需求。
对应代码示例:
class Wizard: def __init__(self, name): self.name = name @classmethod def get(cls): # 这里的cls在Student调用super().get()时是Student类 return cls("Albus") class Student(Wizard): def __init__(self, name, wand): super().__init__(name) self.wand = wand @classmethod def getstudent(cls): return super().get() # 直接实例化正常 student1 = Student("Harry", "Holly wand") # 调用getstudent()报错:TypeError: Student.__init__() missing 1 required positional argument: 'wand' student2 = Student.getstudent()
内容的提问来源于stack exchange,提问作者user123797
相关产品推荐
相关产品推荐

