Python3 OOP疑问:父类mclass2如何调用子类ma1的logout方法?
问题解决:父类调用子类方法的错误修复
错误原因
你代码里的AttributeError是因为在mclass2的方法中使用super().logout():
super()在mclass2中指向的是它的直接父类(默认是object),而object类并没有logout方法,所以触发报错。- 你想要实现父类调用子类的方法,这时候应该用
self而非super(),因为self指向当前实际的实例(这里是ma1的实例),该实例继承了子类的logout方法。
修复后的代码
修改mb.py中的两个方法,将super().logout替换为self.logout:
class mclass2(): m2var = 5 m1avar = 5 def doit(self): self.logout("m2 do it") def m2do(self): self.logout("child class")
运行验证
修改后运行main.py,输出结果如下:
doit! <--- this is correct 10 5 child class <--- this is correct
父类方法成功调用了子类的logout方法,完全符合预期。
补充优化(可选)
如果希望强制子类必须实现logout方法,可以把mclass2定义为抽象基类,提前避免子类未实现方法导致的错误:
from abc import ABC, abstractmethod class mclass2(ABC): m2var = 5 m1avar = 5 def doit(self): self.logout("m2 do it") def m2do(self): self.logout("child class") @abstractmethod def logout(self, a): pass
这样如果子类没有实现logout方法,实例化时会直接报错,提前发现问题。
内容的提问来源于stack exchange,提问作者Sylv99
相关产品推荐
相关产品推荐

