[英]Sharing a base class between two derived classes in Python
在这种情况下,类A是类B和C的父级。目标是在实例b和c之间共享状态。 这与添加或覆盖函数无关,而与状态值a
。
class A():
def __init__(self):
self.a ='a'
print('@a')
class B(A):
def __init__(self):
A.__init__(self)
self.x = 'b'
class C(A):
def __init__(self):
A.__init__(self)
self.x = 'c'
b = B()
c = C()
print(b.a, b.x)
print(c.a, c.x)
输出是
@a
@a
a b
a c
我了解为什么会这样; A中的__init__()
被调用了两次。 我可以进行测试,使其仅设置一次初始值,但这似乎不是一个很好的解决方案。 另外,它仅允许共享一个A实例。 如果我想在B和C的其他两个实例之间共享A的另一个实例,则无法完成。 这同样适用于做a
全球性的模块内,摆脱A类的完全。 有没有解决此问题的好方法?
同意abarnert:这没有任何意义。 这不是继承的意思。
继承意味着每个B实例都是一个A实例,每个C实例都是一个A实例。 AB实例没有单独的A实例,并且当然不能与C实例共享。
如果希望B和C对象具有一个A实例,并且具有相同的 A实例,则需要进行组合:
class A(object):
def __init__(self):
self.state = whatever()
self.other_state = more_stuff()
class B(object):
def __init__(self, a):
self.a = a
class C(object):
def __init__(self, a):
self.a = a
a = A()
b = B(a)
c = C(a)
现在b
和c
都共享A
的单个实例,并且通过两个对象都可以看到对该共享实例的更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.