我试图找到以下原因的解释...
class First():
def __init__(self, value):
self.value = value + object_second.value_2
class Second():
def __init__(self):
self.value_2 = 0
def change_value_2(self):
self.value_2 = 10
object_second = Second()
object_first = First(10)
print(object_first.value)
object_second.change_value_2()
print(object_first.value)
...返回:
10
10
不是我所期望的:
10
20
第二个实例的属性更新时,第一个实例的属性是否不会自动更新,即使第一个实例的属性值取决于后者?
答案 0 :(得分:0)
只需看看您编写的代码即可。您首先创建Second
对象,该对象将以value2
作为0
创建。然后,您创建first
对象,该对象将为其传递的(10)值和value
的{{1}}的值{{1 }}。 value2
,因此结果10被分配给second
的{{1}}。以后更改0
时,不会影响10 + 0 = 10
,因为它已经评估并添加了它们。以后更改value
对first
因此,仅当创建first时,才会评估first中的值。当您第二次更改时,它不会更新。如果您在更改第二个对象之后创建另一个第一个对象,则会看到此信息。第二个对象的值设置为10后,创建的第一个对象的值将为20
value2
输出
first
此外,您永远不要在类中直接编写对象实例。如果您的类需要对象实例,则应将其作为创建调用的一部分传递。