为什么Python引用等式不起作用?

2024-04-19 14:43:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类,它有一个名为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


Tags: inselfidobjforisdeffind
1条回答
网友
1楼 · 发布于 2024-04-19 14:43:36

我解决了我的问题。当我引用s.sheets时,它每次都调用property函数并生成一个新列表。因此,当我传递s.sheets[0]时,它实际上是一个不同的对象,而不是遍历self.sheets时的第一个对象。你知道吗

这里的教训是。。。使用属性时要小心,它们的行为与变量不同。你知道吗

相关问题 更多 >