在Python中的两个派生类之间共享基类

2024-09-24 06:29:09 发布

您现在位置: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)

输出是

^{pr2}$

我理解为什么会发生这种情况;__init__()在A中被调用了两次。我可以设置一个测试,这样它只设置初始值一次,但这似乎不是一个非常优雅的解决方案。另外,它只允许共享的一个实例。如果我想让另一个A实例在另外两个B和C实例之间共享,这是不可能的。在模块内部使a全局化,并完全去掉类A也是如此。有没有一个好的Python式的方法来解决这个问题?在


Tags: 模块实例函数self目标init状态def
1条回答
网友
1楼 · 发布于 2024-09-24 06:29:09

同意阿巴纳特:这没有任何意义。这不是继承的意思。在

继承意味着每个B实例都是的A实例,而每个C实例都是的A实例。B实例没有单独的A实例,当然也不能与C实例共享。在

如果您希望B和C对象有一个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和{}都共享A的单个实例,对该共享实例的更改将通过这两个对象可见。在

相关问题 更多 >