我有一个程序(下面简化版),它在循环中创建对象。在该对象中,有一个变量应该在创建对象时设置。然而,它接缝是存储先前创建的对象的值...例如/
class createList()
list1 = []
def __init__(self, int):
list1.append(int)
for i in range (0, 3)
x = createList(i)
print(x.list1)
>>> 0
>>> 0, 1
>>> 0, 1, 2
>>> 0, 1, 2, 3
有人能指出我的方向,做错了吗?
答案 0 :(得分:1)
您已将list1
定义为类变量。因此,它与createList
的所有实例共享。
您想要的是将其定义为实例变量。
class createList(object):
def __init__(self, integer):
self.list1 = []
self.list1.append(integer)
>>> for i in range(3):
... x = createList(i)
... print(x.list1)
...
...
[0]
[1]
[2]
在列表中存储单个值听起来有点奇怪,但是在你给出的上下文中是不可能的。另外,覆盖内置int
是不好的做法。
PS。从技术上讲,python没有类或实例变量,它有数据属性。但是,在类语句体中定义的变量是在每个实例化对象之间共享的静态变量。实例变量也是数据属性,但对于相关对象是本地的。
答案 1 :(得分:1)
我昨天刚刚给出了非常类似问题的解释。请参阅my answer here。