【发布时间】:2019-09-23 02:51:24
【问题描述】:
好的,让我们从代码开始,因为它非常明确:
class c_1:
def __init__(self):
self.a = 5
class c_2:
def __init__(self,other_obj):
self.other = other_obj
self.b = self.other.a
obj_1 = c_1()
obj_2 = c_2(obj_1)
print(obj_2.b)
>>>5
obj_1.a = 8
print(obj_2.b)
>>>5
这就是问题所在。我知道 obj_2.b 的第二次调用应该返回 5,但我希望它返回 8。
我认为我真正想要的是将 obj_1.a 的值通过引用传递给 obj_2.b (这个例子很简单,但是在我的实际代码中,obj_2 使用了来自 obj_1 的更多属性.)
有没有办法在 obj_1.a 的值发生变化时自动更新 obj_2.b 而不调用其他方法?谢谢。
【问题讨论】:
-
基本上,不能这样做的原因是 Python 变量是按值传递的,而不是按引用传递的。 Python 也没有任何语言机制允许您声明作为引用的变量,就像其他一些 C 风格的语言一样。
-
您可以通过将值封装在对象中并传递它来规避这种情况。
标签: python python-3.x oop object attributes