super().__init__传参报错:实参数量不符及类变量引用疑问
问题解答
为什么提示传入4个参数?
Python 中调用 super().__init__() 时,不需要手动传入self——super 返回的代理对象会自动把当前实例作为第一个参数传递给父类的__init__方法。
你代码里的调用super().__init__(self, self.event_pattern, stm),相当于多传了一个self,实际传递的参数是:
- 自动传入的当前实例(对应父类
__init__的self) - 手动传入的
self self.event_patternstm
总共4个参数,但父类__init__只定义了3个位置参数(self, event_pattern, stm),所以触发了TypeError。
修正后的调用代码应该是:
super().__init__(self.event_pattern, stm)
能不能在__init__方法中引用类变量event_pattern?
完全可以。类变量属于整个类,实例方法(包括__init__)有两种合法的访问方式:
- 使用
self.event_pattern:实例会优先查找自身属性,找不到时自动去所属类中查找,这里因为你的实例没有重定义event_pattern,所以会直接拿到类变量的值 - 使用
SomeClassName.event_pattern:直接从类本身获取类变量,逻辑更明确
你代码里用self.event_pattern的写法完全合规,没有问题。
内容的提问来源于stack exchange,提问作者joeUser555
相关产品推荐
相关产品推荐

