I risultati del codice sottostante in Python 2.7 mi hanno colpito come una contraddizione. L'operatore is
dovrebbe funzionare con l'identità dell'oggetto e quindi è id
. Ma i loro risultati divergono quando guardo un metodo definito dall'utente. Perché?Funzione `id` in Python 2.7, operatore` is`, identità dell'oggetto e metodi definiti dall'utente
py-mach >>class Hello(object):
... def hello():
... pass
...
py-mach >>Hello.hello is Hello.hello
False
py-mach >>id(Hello.hello) - id(Hello.hello)
0
Ho trovato il seguente estratto dalla descrizione del Python data model alquanto utile. Ma non ha davvero chiarito tutto. Perché la funzione id
restituisce lo stesso numero intero se gli oggetti metodo definiti dall'utente vengono ricostruiti ogni volta?
oggetti metodo definito dall'utente possono essere creati quando ottiene un attributo di una classe (forse tramite un'istanza di quella classe), se questo attributo è un oggetto funzione definita dall'utente, un metodo di oggetto definito dall'utente non associato, o un oggetto metodo di classe. Quando l'attributo è un oggetto metodo definito dall'utente, un nuovo oggetto metodo viene creato solo se la classe da cui viene richiamato è uguale o una classe derivata della classe memorizzata nell'oggetto metodo originale; in caso contrario, l'oggetto metodo originale viene utilizzato così com'è.
@ user2357112 - Penso che OP capisca quella parte "Perché la funzione' id' restituisce lo stesso numero intero se gli oggetti metodo definiti dall'utente vengono ricostruiti ogni volta? ". Un dupe migliore sarebbe http://stackoverflow.com/q/3877230/748858 – mgilson
@mgilson: Sì, è per questo che ho riaperto. Devo smettere di usare il dupehammer così in fretta. – user2357112
@ user2357112 - Mi è piaciuto molto di più nel giorno in cui sono richieste altre 4 persone per essere d'accordo con me che era un vero capriccio - In questi giorni sono più riluttante a mettere giù il dupehammer ... – mgilson