我有一个带有名为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
答案 0 :(得分:0)
我发现了我的问题。当我引用s.sheets
时,它每次都调用属性函数并生成一个新列表。因此,当我传递s.sheets[0]
时,它实际上是与遍历self.sheets
的第一个对象不同的对象。
这里的教训是...使用属性时要小心,它们的行为不同于变量。