我有一个带有字符串和字典的简单类。当我创建该类的多个对象时,显然字典没有正确初始化。所有对象的字典包含最后创建的对象的条目。代码是:
# 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。问题出在哪里以及如何解决?感谢您的帮助。
最佳答案
目前,valuedict
是一个类对象。我相信您想要的是拥有单独的实例,在这种情况下您将需要一个构造函数(在 Python 中称为 __init__
)。
更正后的类代码如下(self
指类的实例)
class Myclass:
def __init__(self):
self.name = ""
self.valuedict = {}
那为什么不是 name
以同样的方式行事?在第一个 for 循环中,您定义 name
,您访问 valuedict
的 key ,它不存在,所以你采用“下一个最好的东西”,即类变量。 name
没有这个问题,因为你正在初始化它。可以找到对此的更好解释 here .
关于python - 字典类未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47374041/