循环中方法的身份相等

时间:2019-05-17 11:33:44

标签: python

考虑以下代码:

def a():
    pass

def comp():
    for f in (a,):
        if f is a:
            print("Identity")
        elif f == a:
            print("Equality")

comp()

我创建一个函数a和一个函数comp,用于检查元组(a,)中的所有函数是否与a相同({ {1}}或等于(f is a)。毫不奇怪,此代码显示了“身份”一词。

但是,如果我将这些函数转换为类f == a的实例方法,情况将不再如此:

Test

令我惊讶的是,它打印的是“平等”而不是“身份”。确实,如果我们将class Test(object): def a(self): pass def comp(self): for f in (self.a,): if f is self.a: print("Identity") elif f == self.a: print("Equality") t = Test() t.comp() 放在print(id(f), id(self.a))循环中,它将打印不同的标识值。如我所料,这两个身份与for不同。

这是为什么?为什么在普通函数没有的情况下,方法似乎被for循环复制了?

0 个答案:

没有答案