python继承多个父类,父类中都有同名方法,需要继承所有父类的同名方法

python继承多个父类时候,父类有同名方法的,默认继承第一个父类的同名方法,如果想想继承那几个或者所有的同名方法都想继承,那就这样:

class A(object):
    def setup_ui(self):
        self.name = "xiaoming"


class B(object):
    def setup_ui(self):
        self.age = 16


class C(A, B):
    def __init__(self):
        super().setup_ui()  # 这是继承第一个父类的同名方法
        B.setup_ui(self)  # 下面依次用父类名.同名方法(self)  来继承,有多个的话下面也是这样写
    def setup_ui(self):
        print(self.name, self.age)


obj = C()
obj.setup_ui()
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python ,如果一个子类继承多个父类,而这些父类都有同名方法或属性,那么子类在调用这个方法或属性时,会按照 MRO(Method Resolution Order,方法解析顺序)的规则进行查找和调用。在 Python ,MRO 的顺序是由 C3 算法计算出来的。C3 算法是一种基于拓扑排序和合并的算法,用于计算出多继承的类的方法解析顺序。 如果一个子类没有定义与父类同名方法或属性,那么当调用这个方法或属性时,就会按照 MRO 的顺序访问父类方法或属性。MRO 的顺序是由子类的 __mro__ 属性决定的,该属性是一个元组,其包含了所有父类和子类的类对象。 如果想要控制子类先访问哪个父类方法,可以通过修改子类的 __mro__ 属性来实现。例如,如果想要让子类先访问父类 A 的方法,可以这样写: ```python class A: def method_a(self): print("A's method_a") class B: def method_a(self): print("B's method_a") class C(A, B): pass class D(B, A, C): __mro__ = (D, B, A, C) d = D() d.method_a() # 输出:B's method_a ``` 在上面的例子,子类 D 继承父类 A 和 B,而这两个父类都定义了 method_a 方法。为了让子类先访问父类 B 的方法,可以将子类的 __mro__ 属性修改为 (D, B, A, C)。这样,当子类调用 method_a 方法时,就会先访问父类 B 的方法需要注意的是,修改 __mro__ 属性可能会导致继承链的混乱和代码的可读性变差,因此应该谨慎使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值