繁体   English   中英

Python双重继承相同的属性

[英]python double inheritance same attributes

我有一个类继承自其他两个具有相同属性的类:

class A:
    def __init__(self):
        self.name = 'A'

class B:
    def __init__(self):
        self.name = 'B'

class C(A, B):
    def __init__(self):
        A.__init__(self)
        B.__init__(self)

是否有可能在C类中重命名一件服装?

不,不是小事。 您不能告诉方法跳过分配,也不能告诉方法中的代码使用其他属性名称。

你可以,当然,有子类实现__setattr__钩或@property与二传手拦截属性分配,但是这不会是一个解决办法,如果基类还期望再次读取属性和基础进一步行为的价值。 更新基类的代码或找到实现所需功能的其他方法都更加容易。

如果您使用的是两个这样不兼容的基类,则可能您使用的这些基类是错误的。

您的示例很简单,但是如果两个基类都将相同的属性设置为互不兼容的值,那么您就不能指望这两个类中的代码都能按设计工作。 您不能重命名该属性的使用,它们都将继续期望self上的属性状态遵循它们自己的约束,因此两者基本上都已失效。

在这种情况下,也许您实际上不需要继承。 也许您想改用组合,在您自己的自定义类中存储您现在用作基础的两个类的实例。

您可以尝试不继承。 在A和B的C类中创建对象,如下所示:

class A:
    def __init__(self):
        self.name = 'A'

class B:
    def __init__(self):
        self.name = 'B'

class C():
    def __init__(self):        
        self.newA = A()
        self.newB = B()

if __name__ == "__main__":

    my_c = C()
    print(my_c.newB.name)
    print(my_c.newA.name)

输出:

B
A

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM