You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:55:22