python - 字典类未初始化

标签 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。问题出在哪里以及如何解决?感谢您的帮助。

最佳答案

目前,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/

相关文章:

Python 字典和线程并发

python - flake8 中的缩进配置

java - 如何创建该类的对象?

java - 有角度和距离结构或类是个好主意吗

python - 从变量名或字符串创建列表或字典

c++ - 在 for 循环中调用一个函数来删除 vector (或列表)中的元素

python - 为什么我们有 lower_case_with_underscores 命名约定?

python - Pandas 每 n 行 groupby 模式

python - 将 csv 文件写入 kafka 主题

python - 'numpy.float6 4' object has no attribute ' 应用'