Python 3.x Python:在循环中创建字典:{int,class object}

Python 3.x Python:在循环中创建字典:{int,class object},python-3.x,Python 3.x,我想在循环中创建一个命令式:{int,Class},但是类对象被重写。 我很确定这是一个基本问题,但我被卡住了 class Simple: simpleDic = { 'name': {""}, 'age': {1}} def __init__(self, name, age): self.simpleDic['name'] = name self.simpleDic['age'] = age

我想在循环中创建一个命令式:{int,Class},但是类对象被重写。 我很确定这是一个基本问题,但我被卡住了

class Simple:
    simpleDic = {
        'name': {""},
        'age': {1}}

    def __init__(self, name, age):
        self.simpleDic['name'] = name
        self.simpleDic['age'] = age
    
    def __str__(self):
        return "{} {}\n".format(self.simpleDic['name'], self.simpleDic['age'])

def foo():
    myDict = {}
    for x in range(3):
        myDict[x] = Simple('Name' + str(x), x)
        print(('{}: {}\n'.format("Creating", myDict[x])))
    
    for key in myDict:
        print(('{}: {}\n'.format("Printing" + str(key), myDict[key])))


#### Main program here ####

foo()
结果如下:


你的问题在最后一次打印上 您正在打印
myDict[x]
何时应该打印
myDict[key]

x包含第一次迭代中的最后一个值,因此实际上是在到处打印同一个键

以下是您在本评论中提出的问题:

class Simple:

    def __init__(self, name, age):
        self.simpleDic = {"name": name, "age": age}
    
    def __str__(self):
        return "{} {}\n".format(self.simpleDic['name'], self.simpleDic['age'])
    
    def __repr__(self):
        return "{} {}\n".format(self.simpleDic['name'], self.simpleDic['age'])    

def foo():
    myDict = {}
    for x in range(3):
        myDict[x] = Simple('Name' + str(x), x)
        print(('{}: {}\n'.format("Creating", myDict[x])))
        
    print(myDict)

天哪,这是多么愚蠢的错误。对此我很抱歉。发生在我们当中最好的人身上:)如果我像现在讨论的那样更改了代码(用字典替换了简单变量):那么它将失败,因为myDict属于
foo
函数的范围,您将得到一个
NameError:name'myDict'未定义
您可以在foo函数中返回
myDict
,并将其分配给全局作用域上的一个变量(在循环之前)