用作类变量时,数字和列表的行为不同:数字不与实例共享,而列表变量则可以。 (在相同条件下)有人可以解释一下发生了什么吗?
Ps:已经问过这个问题(解释不太清楚),它被认为是关于一般类变量的问题的重复。我问为什么在相同条件下数字和列表类变量之间存在差异。
class test_class:
number = 0
list = [8]
def addnum(self, num):
self.number = num
def addlist(self, list):
self.list.append(list)
object = test_class()
object.addnum(5)
object.addlist(6)
print(test_class.number)
print(object.number)
print(test_class.list)
print(object.list)
打印:
0
5 (number variable is not shared)
[8, 6] (list was shared)
[8, 6]
预期:
0
5
[8]
[8, 6] (list gets appended without affecting the original)
最佳答案
类变量应该被视为一种全局变量:存储整个类的全局状态的地方(很少需要),以及定义共享常量的地方(非常常见)。如果您希望实例的数据因实例而异,请将它们设置在 __init__()
中。方法,而不是在类级别。
就您观察到的差异而言,在一种情况下,您正在为属性分配一个值,而在另一种情况下,您正在更改已存储在属性中的值。核心问题是赋值和变异之间的区别。
关于python - 类变量根据其类型而表现不同(共享或不共享),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56052270/