Python双重继承相同的属性

时间:2018-10-15 15:13:55

标签: python class inheritance attributes double

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

K = (X \ Z) U (Y ∩ Z)

是否有可能在C类中重命名一件礼节?

2 个答案:

答案 0 :(得分:3)

不,并非轻而易举。您不能告诉方法跳过分配,也不能告诉方法中的代码使用其他属性名称。

您当然可以让子类实现带有设置器的__setattr__钩子或@property拦截属性分配,但是如果满足以下条件,这将不是解决方案基类还希望再次读取该属性,并根据该值执行进一步的操作。更新基类的代码或找到实现所需功能的其他方法都更加容易。

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

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

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

答案 1 :(得分:0)

您可以尝试不继承。将对象放入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