python - python list.append() 存储类对象时的问题
问题描述
当某些类对象将在循环过程中添加到列表中时,我遇到了问题。假设我有一个[ 'kid' , 'parent' , 'grandfather' ]
包含许多记录的数据库。我有一堂课:
class Person:
name
children
grandchildren
我做了一个循环(我知道这是一个坏主意,我可以简单地使用查询)并查找每个grandfather
. 一个类的实例存储了每一个的数据,grandfather
最后被附加到一个名为 的列表中Persons_List
。这是代码:
p = Person()
Persons_List = list()
pr = "" #parents
gr = "" #grandfather
for i in my_database.objects.all().order_by('grandfather'):
if gr != i.grandfather:
gr = i.grandfather
pr = i.parent
if p.name !="":
Persons_List.append(p) # [:] raises Error and deepcopy not working
p.name = ""
p.parents.clear()
p.grandchildren.clear()
p.name = i.grandfather
p.children.append(i.parent)
p.grandchildren.append(i.kid)
else:
if pr != i.parent:
pr = i.parent
try:
p.children.remove(pr)
except: None
p.children.append(pr)
p.grandchildren.append(i.kid)
Persons_List.append(p) #Adds The Last p To The List
问题是最终存储在列表中的数据是错误的和混乱的。名字是最后一个p.name
。和是错误 children
的。grandchildren
解决方案
首先:您在 . 处缺少缩进Persons_List.append(p)
。您当前正在附加p
到 for 循环之外的列表。
另一点可能是您p
在循环中一遍又一遍地覆盖您的对象。
那是因为您p = Person()
在 for 循环之外创建并在其中更改引用的对象。
如果您在 for 循环中创建一个新对象,它应该可以工作。例子:
list = []
for i in queryset:
p = Person()
# do stuff
list.append(p)
print(list) # your finished list
推荐阅读
- reactjs - 每次安装组件时,React hook useEffect 都会导致初始渲染
- mesos - 如何修复以下马拉松身份验证错误
- node.js - 使用节点 9 进行 jspm 安装时出错
- python - 从 C 重新编码到 Python
- javascript - 属性未显示在 json 中,重组 json 对象
- php - 我想在每个月的第一个完整周的第一个星期三重新计费,每个月都应该从星期一开始
- ruby-on-rails - 如何在设计会话控制器中查看电子邮件/用户名
- javascript - 如何在 ThreeJs R71 中将光线投射到点云上
- elasticsearch - Elasticsearch 两种聚合的共同点
- javascript - 更改 background-image 属性会导致 Firefox 闪烁