字典没有初始化的类

时间:2017-11-19 05:36:06

标签: python python-3.x class oop dictionary

我有一个带字符串和字典的简单类。当我创建类的多个对象时,显然字典没有正确初始化。所有对象的字典包含最后创建的对象的条目。代码是:

# 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。问题出在哪里?如何解决?谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

目前,valuedict是一个类对象。我相信你的目标是拥有单独的实例,在这种情况下,你需要一个构造函数(在Python中称为__init__)。

更正的类代码如下(self指的是类的实例)

class Myclass:
    def __init__(self):
        self.name = ""
        self.valuedict = {}

那么为什么name以同样的方式行事?在第一个for循环中,您定义 name,您将访问一个valuedict的密钥,其中包含{&1>} #39; t存在,所以你选择"下一个最好的东西",类变量。 name没有问题,因为您正在初始化它。可以找到更好的解释here