class 及其子 class 在 python 中共享状态的实例
Instances of a class and its sub-class sharing state in python
如何使派生 class 的一个实例与其基础 class 在 Python 中的另一个实例共享属性和状态?
class Foo(object):
def __init__(self, a, b):
self.value = a
def method1(self):
self.value += 1
return self.value
class Foo_child(Foo):
def __init__(self, Foo_instance, c, d):
super().__init__()
A = Foo(30,40)
B = Foo_child(A,50,60)
我需要的是改变 B
应该影响 A
的某种方式,反之亦然。
例如如果我调用 B.method1
,那么我需要 A
才能得到 31 的 A.value
,反之亦然。有什么明显的 pythonic 方法可以做到这一点吗?
你的问题是包含(has-a)关系,而不是is-a关系。使 Foo_child
继承自 Foo
可能 也 是必要的(它们提供相同的功能),但本质上你想委托处理 value
和 method1
到 Foo_instance
.
在 Foo_child
上重新实现 method1
以委托给 Foo_instance
,value
在 Foo_child
上应该是一个 property
对象代表们:
class Foo_child(Foo):
def __init__(self, Foo_instance, c, d):
super().__init__(c, d)
self.Foo_instance = Foo_instance
@property
def value(self):
return self.Foo_instance.value
@value.setter
def value(self, value):
self.Foo_instance.value = value
def method1(self):
return self.Foo_instance.method1()
如何使派生 class 的一个实例与其基础 class 在 Python 中的另一个实例共享属性和状态?
class Foo(object):
def __init__(self, a, b):
self.value = a
def method1(self):
self.value += 1
return self.value
class Foo_child(Foo):
def __init__(self, Foo_instance, c, d):
super().__init__()
A = Foo(30,40)
B = Foo_child(A,50,60)
我需要的是改变 B
应该影响 A
的某种方式,反之亦然。
例如如果我调用 B.method1
,那么我需要 A
才能得到 31 的 A.value
,反之亦然。有什么明显的 pythonic 方法可以做到这一点吗?
你的问题是包含(has-a)关系,而不是is-a关系。使 Foo_child
继承自 Foo
可能 也 是必要的(它们提供相同的功能),但本质上你想委托处理 value
和 method1
到 Foo_instance
.
在 Foo_child
上重新实现 method1
以委托给 Foo_instance
,value
在 Foo_child
上应该是一个 property
对象代表们:
class Foo_child(Foo):
def __init__(self, Foo_instance, c, d):
super().__init__(c, d)
self.Foo_instance = Foo_instance
@property
def value(self):
return self.Foo_instance.value
@value.setter
def value(self, value):
self.Foo_instance.value = value
def method1(self):
return self.Foo_instance.method1()