在这种情况下,类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)
输出是
^{pr2}$我理解为什么会发生这种情况;__init__()
在A中被调用了两次。我可以设置一个测试,这样它只设置初始值一次,但这似乎不是一个非常优雅的解决方案。另外,它只允许共享的一个实例。如果我想让另一个A实例在另外两个B和C实例之间共享,这是不可能的。在模块内部使a
全局化,并完全去掉类A也是如此。有没有一个好的Python式的方法来解决这个问题?在
同意阿巴纳特:这没有任何意义。这不是继承的意思。在
继承意味着每个B实例都是的A实例,而每个C实例都是的A实例。B实例没有单独的A实例,当然也不能与C实例共享。在
如果您希望B和C对象有一个A实例,并且希望具有相同的实例,则需要组合:
现在,}都共享
b
和{A
的单个实例,对该共享实例的更改将通过这两个对象可见。在相关问题 更多 >
编程相关推荐