[英]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.