将实例属性值添加到其他实例的属性中,我的错误在哪里?

时间:2019-12-29 20:52:27

标签: python-3.x class attributes instance

我试图找到以下原因的解释...

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

第二个实例的属性更新时,第一个实例的属性是否不会自动更新,即使第一个实例的属性值取决于后者?

1 个答案:

答案 0 :(得分:0)

只需看看您编写的代码即可。您首先创建Second对象,该对象将以value2作为0创建。然后,您创建first对象,该对象将为其传递的(10)值和value的{​​{1}}的值{{1 }}。 value2,因此结果10被分配给second的{​​{1}}。以后更改0时,不会影响10 + 0 = 10,因为它已经评估并添加了它们。以后更改valuefirst

无效

因此,仅当创建first时,才会评估first中的值。当您第二次更改时,它不会更新。如果您在更改第二个对象之后创建另一个第一个对象,则会看到此信息。第二个对象的值设置为10后,创建的第一个对象的值将为20

value2

输出

first

此外,您永远不要在类中直接编写对象实例。如果您的类需要对象实例,则应将其作为创建调用的一部分传递。