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

Python多继承同名方法问题:Invoice类如何同时调用父类get()方法

解决Python多继承中同名方法的调用问题

你遇到的问题是Python多继承的**方法解析顺序(MRO)**导致的:当子类继承多个父类且存在同名方法时,Python会按照继承列表的顺序(你这里是Time在前,Date在后)查找并调用第一个匹配的方法,所以self.get()只会触发Time类的get,不会自动执行Date的。

要让两个父类的get方法都被调用,有两种直接的解决方式:

1. 在__init__中显式调用每个父类的get方法

直接指定父类并传入当前实例,确保两个方法都执行:

class Time:
    def get(self):
        self.h = 12
        self.m = 30
        self.s = 0
        # 替换为你的实际获取时/分/秒逻辑

class Date:
    def get(self):
        self.y = 2024
        self.m = 5
        self.d = 20
        # 替换为你的实际获取年/月/日逻辑

class Invoice(Time, Date):
    def __init__(self):
        # 分别调用Time和Date的get方法
        Time.get(self)
        Date.get(self)

# 测试
inv = Invoice()
print(f"时间:{inv.h}:{inv.m}:{inv.s}")
print(f"日期:{inv.y}-{inv.m}-{inv.d}")

2. 重写子类的get方法,统一调用父类方法

如果后续需要多次调用get,可以在Invoice中重写get,把两个父类的调用逻辑封装进去:

class Invoice(Time, Date):
    def get(self):
        Time.get(self)
        Date.get(self)
    
    def __init__(self):
        self.get()

对于show()、set()这类其他同名方法,完全可以套用同样的逻辑——在子类的对应方法里,显式调用每个父类的方法,就能让所有父类的逻辑都被执行。

内容的提问来源于stack exchange,提问作者Alien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:05:05