我有一个类继承自其他两个具有相同属性的类:
K = (X \ Z) U (Y ∩ Z)
是否有可能在C类中重命名一件礼节?
答案 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