【发布时间】:2018-09-23 06:25:18
【问题描述】:
我有两个来自不同类的对象。什么是合理的设计选择来使一个属性反映另一个属性的变化?下面显示了一个无效的幼稚解决方案,希望能说明目标:
具体来说:
class A(object):
def __init__(self):
self.x = 'a original string'
class B(object):
def __init__(self):
self.x = 'b original string'
a = A()
b = B()
b.x = a.x
a.x = 'a modified string'
print('b.x = "{}" was not modified when a.x = "{}" was changed'.format(b.x, a.x))
【问题讨论】:
-
你为什么要这样做?这个问题几乎总是XY problem,真正的问题比你想问的问题更容易和更有用。如果您的用例是少数例外之一,那么了解它的不同之处将使编写特定的东西变得更容易,而不是有意义。
-
您可以拥有多个副本,
a1, a2, a3 = A(), A(), A()和b1, b2, b3 = B(), B(), B()。您希望x的分享程度如何?b2如何知道它与哪个aX共享? -
@tdelaney 大概是因为它知道因为那个赋值行——他写了
b.x = a.x,他没有写b.x = a2.x。这在变量是左值而不是名称的语言中是有意义的,只是在 Python 中没有意义。
标签: python python-3.x oop properties attributes