繁体   English   中英

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

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

现在bc都共享A的单个实例,并且通过两个对象都可以看到对该共享实例的更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM