将对象添加到列表时遇到问题。当我将对象追加到列表的末尾,然后尝试遍历列表时,列表上的每个点都只给我返回最近添加的对象。
该脚本会比较Excel电子表格中不同项目的信息。我正在使用适用于Windows的Python和win32com.client来访问我感兴趣的spedsheets。我在Stack Overflow上阅读了一些其他文章,但在将唯一对象添加到列表时遇到了问题,但是我确定我不会具有与他们相同的错误(在循环中初始化列表,在创建类对象时不提供输入属性)。
我可以在循环中注释掉对象的创建,只需将数字添加到列表中,就可以打印出所有三个唯一值,但是一旦我将对象创建的调用放回去,事情就会出错。下面的代码仅显示三个最新添加的项目。任何帮助将不胜感激,谢谢!
class Project:
"""
Creates an instance for each project
in the spreadsheet
"""
def __init__(self, bldg, zone, p_num, p_name, p_mgr,
const_mgr, ehs_lias, ehs_const, status,
p_type, start, finish):
self.bldg = bldg
self.zone = zone
self.p_num = p_num
self.p_name = p_name
self.p_mgr = p_mgr
self.const_mgr = const_mgr
self.ehs_lias = ehs_lias
self.ehs_const = ehs_const
self.status = status
self.p_type = p_type
self.start = start
self.finish = finish
def quickPrint(self):
""" prints quick glance projects details """
if p_name is None:
pass
else:
print 'Building ' + str(bldg.Value)
print str(p_name.Value)
print str(p_type.Value) + " -- " + str(p_mgr.Value)
print str(start.Value) + " - " + str(finish.Value)
projects = []
for i in range(25, 28):
bldg = excel.Cells(i,1)
zone = excel.Cells(i,2)
p_num = excel.Cells(i,3)
p_name = excel.Cells(i,4)
p_mgr = excel.Cells(i,5)
const_mgr = excel.Cells(i,6)
ehs_lias = excel.Cells(i,7)
ehs_const = excel.Cells(i,8)
status = excel.Cells(i,9)
p_type = excel.Cells(i,10)
start = excel.Cells(i,11)
finish = excel.Cells(i,12)
projects.append(Project(bldg, zone, p_num, p_name, p_mgr,
const_mgr, ehs_lias, ehs_const,
status, p_type, start, finish))
projects[0].quickPrint()
projects[1].quickPrint()
projects[2].quickPrint()
我认为您定义quickPrint
错误。至于它而言,p_name
,p_type
,p_mgr
,等是没有定义,所以它进一步查找范围解析树,或不管它的名字,然后最终发现他们-您上次在它们定义为循环,这就是为什么它给您最后的价值。
因为您在循环中使用了相同的变量名,所以您将隐藏此问题,并使其更加混乱。
def quickPrint(self):
""" prints quick glance projects details """
if self.p_name is None:
pass
else:
print 'Building ' + str(self.bldg.Value)
print str(self.p_name.Value)
print str(self.p_type.Value) + " -- " + str(self.p_mgr.Value)
print str(self.start.Value) + " - " + str(self.finish.Value)
例子:
class Project(object):
def __init__(self, argument):
self.argument = argument
def __repr__(self):
return str(argument)
projects = []
for i in range(10):
argument = i
projects.append(Project(argument))
print projects
这个输出 [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
更改__repr__(self):
定义以对其进行self.argument
修复。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句