【发布时间】:2021-08-24 00:33:13
【问题描述】:
考虑以下最小示例:
>>> from dataclasses import dataclass
>>> @dataclass
... class my_stuff:
... my_variable: int = 0
...
>>> def my_func():
... stuff = my_stuff
... stuff.my_variable += 1
... print(stuff.my_variable)
...
>>> my_func()
1
>>> my_func()
2
>>> my_func()
3
为什么每次调用my_func() 时打印的值都会增加?一旦my_func() 的执行完成,stuff 是否应该不超出范围?并且每次对my_func() 的调用不应该创建一个my_variable 初始化为0 并每次递增为1 的新实例吗?
我将如何更改此代码以满足我的(显然是不合理的)期望,即每次调用 my_func() 时都会输出 1?
【问题讨论】:
-
尝试将 stuff = my_stuff 替换为 stuff = my_stuff() 以每次实例化一个新对象,而不是修改类本身。
-
stuff.my_variable其中stuff=my_stuff修改类属性值。 IE。您的代码按预期工作,而您对不同事物的期望/假设是不合理的。 -
要调试这类问题,本例打印
stuff函数中;你会看到它是类定义。 -
stuff只是my_stuff的另一个名称。一个名称超出范围不会影响对象本身。
标签: python scope python-dataclasses