Martijn è giusto che un nuovo metodi sono oggetti generati da .__get__
così i loro puntatori di indirizzo non equiparano con una Valutazione is
. Si noti che l'utilizzo di ==
valuterà come previsto in 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
nota tuttavia che i metodi di riferimento da un'istanza non equivale a quelli richiamati dalla classe causa del riferimento sé trascinato con il metodo da un'istanza.
>>> t = Test()
>>> t.meth is Test.meth
False
>>> t.meth == Test.meth
False
In Python 3.3 l'operatore is
per i metodi più spesso si comporta come il ==
in modo da ottenere il comportamento previsto invece in questo esempio. Ciò risulta dalla scomparsa di __cmp__
e una rappresentazione di un oggetto metodo più pulito in Python 3; i metodi ora hanno __eq__
e i riferimenti non sono oggetti incorporati, quindi il comportamento segue come ci si potrebbe aspettare senza le aspettative di Python 2.
Python3.3
>>> Test.meth is Test.meth
True
>>> Test.meth == Test.meth
True
>>> Test.meth.__eq__(Test.meth)
True
Questo funziona in Python 3 btw. – poke