Python 如何实例化循环中的对象并将每个实例添加到列表中?

Python 如何实例化循环中的对象并将每个实例添加到列表中?,python,attributes,Python,Attributes,您好,我在这里收到错误消息:AttributeError:“dict”对象没有属性“tag” 这是我的密码: class Move: def __init__(self, tag, quantity, date): self.tag = tag self.quantity = quantity self.date = date moves_list = [] const_weight = 15 def last_tag(): J

您好,我在这里收到错误消息:AttributeError:“dict”对象没有属性“tag” 这是我的密码:

class Move:
    def __init__(self, tag, quantity, date):
        self.tag = tag
        self.quantity = quantity
        self.date = date

moves_list = []
const_weight = 15

def last_tag():
    JSON_file = open('movements.json')
    myList = json.load(JSON_file)
    JSON_file.close()
    print(myList[-1].tag)
    return myList[-1].tag

def last_date():
    JSON_file = open('movements.json')
    myList = json.load(JSON_file)
    JSON_file.close()
    print(myList[-1].date)
    return myList[-1].date
while True:
    tag_rilevato = last_tag()
    if my_tag == last_tag():
            m = Move(my_tag, const_weight, last_date())
            moves_list.append(m)

我不明白
myList[-1]是否有问题。标记
myList[-1]。数量
myList[-1]。日期
?任何人都可以提出一些建议吗非常感谢

您需要访问返回的
json.load()
作为字典,而不是您的
Move
对象。因此,请使用
['tag']
而不是
.tag
。像这样:

def last_标记():
以open('movements.json','r')作为fh:
myList=json.load(fh)
返回myList[-1]['tag']
def last_date():
以open('movements.json','r')作为fh:
myList=json.load(fh)
返回myList[-1]['date']
#代码的其余部分保持不变

我还将文件读/写更改为建议的
,并将open()改为..
语法。当然,这不是解决问题所必需的。

json.load()
返回一个
dict
对象,而不是
Move
对象。这有帮助吗?比你Collin这帮助很大,但我仍然会出错,我怀疑当我的文件为空时它会崩溃,我选择像这样修改它
,用open('movements.json',r')作为j:myList=json.loads(j.read())
我不知道这是否是错误的文档建议
json.loads()
函数接受一个文件对象(即我/你的代码中的
fh
j
),而
json.loads()
接受一个字符串。因此,在您的情况下,您可以执行
json.load(j)
json.load(j.read())
-它们在功能上是相同的。非常感谢您的澄清!这真的很有帮助。