我有一个带字符串和字典的简单类。当我创建类的多个对象时,显然字典没有正确初始化。所有对象的字典包含最后创建的对象的条目。代码是:
# a simple class with a string and a dictionary:
class Myclass:
name = ""
valuedict = {}
# a list for objects:
mylist = []
# create 3 objects:
for i in range(3):
mc = Myclass()
mc.name = str(i)
mc.valuedict['name'] = str(i)
mylist.append(mc)
# disply objects in list:
for item in mylist:
print("-----------------")
print("name = ", item.name)
print("name in dict = ", item.valuedict['name'])
输出结果为:
-----------------
name = 0
name in dict = 2
-----------------
name = 1
name in dict = 2
-----------------
name = 2
name in dict = 2
名称字符串按预期为0,1和2,但字典中的名称在所有3个对象中均为2。问题出在哪里?如何解决?谢谢你的帮助。
答案 0 :(得分:3)
目前,valuedict
是一个类对象。我相信你的目标是拥有单独的实例,在这种情况下,你需要一个构造函数(在Python中称为__init__
)。
更正的类代码如下(self
指的是类的实例)
class Myclass:
def __init__(self):
self.name = ""
self.valuedict = {}
那么为什么name
以同样的方式行事?在第一个for循环中,您定义 name
,您将访问一个valuedict
的密钥,其中包含{&1>} #39; t存在,所以你选择"下一个最好的东西",类变量。 name
没有问题,因为您正在初始化它。可以找到更好的解释here。