的Martijn是正確的,新的方法是通過.__get__
產生的對象,使他們的地址指針不以等號is
評價。請注意,使用==
將按照Python 2.7中的預期進行評估。然而
Python2.7
class Test(object):
def tmethod(self):
pass
>>> Test.meth is Test.meth
False
>>> Test.meth == Test.meth
True
>>> t = Test()
>>> t.meth is t.meth
False
>>> t.meth == t.meth
True
注意,從一個實例引用的方法不等同於那些從類,因爲從一個實例方法一起進行自我參考引用。
>>> t = Test()
>>> t.meth is Test.meth
False
>>> t.meth == Test.meth
False
在Python 3.3 is
運營商的方法更經常的行爲一樣==
讓您得到預期的行爲,而不是在這個例子中。這是由於__cmp__
消失以及Python 3中更清晰的方法對象表示造成的;方法現在有__eq__
,並且引用不是動態內建的對象,因此,如果沒有Python 2期望,行爲可能會如預期的那樣。
Python3.3
>>> Test.meth is Test.meth
True
>>> Test.meth == Test.meth
True
>>> Test.meth.__eq__(Test.meth)
True
這適用於Python 3 btw。 – poke