gpt4 book ai didi

python - 类变量根据其类型而表现不同(共享或不共享)

转载 作者:太空宇宙 更新时间:2023-11-03 20:55:40 25 4
gpt4 key购买 nike

用作类变量时,数字和列表的行为不同:数字不与实例共享,而列表变量则可以。 (在相同条件下)有人可以解释一下发生了什么吗?

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com