提问人:k9wan 提问时间:10/18/2023 更新时间:10/18/2023 访问量:27
就 OOP 而言,在 HAS-A 相关的类之间共享状态的更好方法是什么?
in terms of oop, what is better way to share state between classes which are has-a related?
问:
对不起,如果我的英语不好,我的母语是韩语。
假设 class 有 class 的字段 和 ,并且 class 有 的字段
instance of ,是在创建 instance of 时创建的,是它的字段。 也是相似的。
now 有方法,它依赖于 的实例的状态。
为了实现这一点,我传递了 for initializing 的整个实例。
用 Python 编写的示例大致简化了不需要的细节:A
B
C
C
D
B
C
A
D
D
B
A
C
class D(object):
def __init__(self, a, num):
self.a = a
self.num = num
def print(self):
print(self.a.b.cur() * self.num)
class C(object):
def __init__(self, a):
self.d = D(a, 3)
class B(object):
def __init__(self, x, y):
self.x = x
self.y = y
def cur(self):
return self.x, self.y
class A(object):
def __init__(self):
self.c = C(self)
self.b = B(3, 4)
但我觉得通过自我有点奇怪。 我搜索了几篇文章来寻找共享状态的方法,他们说要使类包含状态(或上下文)。但是,我怎样才能在每个类上正确跟踪这些状态? 如果我像这样制作 State 实例:
class State(object):
def __init__(self, b=None):
self.b = b
class D(object):
def __init__(self, a, num):
self.a = a
self.num = num
def print(self):
print(self.a.b.cur() * self.num)
class C(object):
def __init__(self, a):
self.d = D(a, 3)
class B(object):
def __init__(self, x, y):
self.x = x
self.y = y
def cur(self):
return self.x, self.y
class A(object):
def __init__(self):
self.c = C(self)
self.b = B(3, 4)
self.state = State(self.b)
那么要使得对实例的访问权,它仍然需要被传递。似乎比以前更糟。D
self.state
A
self
会有更好的方法吗?(我想知道如果存在是相关的或不相关的呢?
答:
0赞
quamrana
10/18/2023
#1
如果您需要访问一个 ,那么这就是应该给出的:D
B
class D(object):
def __init__(self, b, num):
self.b = b
self.num = num
def print(self):
print(self.b.cur() * self.num)
class C(object):
def __init__(self, b):
self.d = D(b, 3)
class B(object):
def __init__(self, x, y):
self.x = x
self.y = y
def cur(self):
return self.x, self.y
class A(object):
def __init__(self):
self.b = B(3, 4)
self.c = C(self.b)
评论
0赞
k9wan
10/18/2023
我认为从根本上说,它本质上与传球或传球的方法几乎相同,我通过而不是故意通过。这是实现目标的最佳方式吗?self
self.b
self
self.b
0赞
k9wan
10/18/2023
看来得墨忒耳定律帮助我得到了一些东西。
0赞
quamrana
10/18/2023
是的,从功能上讲,这两种方式是相同的。单元测试无法区分它们。然而,在设计方面,这是一个很小但意义重大的改进:现在不必知道结构的那部分,使其更具可重用性。D
A
0赞
k9wan
10/18/2023
那么如果需要另一个这样的实例,其中的字段是,传递一个元组而不是一个元组会更好吗?D
E
A
(self.b, self.e)
self
评论