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
相关产品推荐
相关产品推荐

