Python 如何实例化循环中的对象并将每个实例添加到列表中?
您好,我在这里收到错误消息:AttributeError:“dict”对象没有属性“tag” 这是我的密码: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
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())
-它们在功能上是相同的。非常感谢您的澄清!这真的很有帮助。