我有一个类,它有一个名为self.sheets
的数组。我有一个函数find_sheet
,如果传递了字符串,它会对标题进行比较;如果传递了Worksheet
,它会对引用进行比较。下面是一个最小的可复制示例:
class Worksheet:
pass
class Spread:
@property
def sheets(self):
return [Worksheet() for i in range(5)]
def find_sheet(self, sheet):
for ix, obj in enumerate(self.sheets):
print("comparing {} is {}".format(id(obj), id(sheet)))
if obj is sheet:
print("found you")
s = Spread()
s.find_sheet(s.sheets[0])
输出comparing 140134415396760 is 140134393512344
我解决了我的问题。当我引用
s.sheets
时,它每次都调用property函数并生成一个新列表。因此,当我传递s.sheets[0]
时,它实际上是一个不同的对象,而不是遍历self.sheets
时的第一个对象。你知道吗这里的教训是。。。使用属性时要小心,它们的行为与变量不同。你知道吗
相关问题 更多 >
编程相关推荐