El Python documentation about the is
operator dice:¿Por qué un método no es idéntico a sí mismo?
los operadores
is
yis not
prueba de identidad objeto:x is y
es verdadero si y sólo six
yy
son el mismo objeto.x is not y
produce el valor inverso de verdad .
Vamos a tratar de que:
>>> def m():
... pass
...
>>> m is m
True
El Python documentation also says:
Debido a la recolección de basura automática, listas libres, y la naturaleza dinámica de descriptores, es posible que observe aparentemente comportamiento inusual en ciertos usos de el operador
is
, como aquellos que implican comp arisons entre métodos de instancia, o constantes. Consulte su documentación para obtener más información.
>>> class C:
... def m():
... pass
...
>>> C.m is C.m
False
me han buscado para más explicaciones, pero no fue capaz de encontrar ninguna.
¿Por qué C.m is C.m
es falso?
Estoy usando Python 2.x. Como se señala en las respuestas a continuación, en Python 3.x C.m is C.m
es verdadero.
Para mayor completitud, [Descriptors] (http://docs.python.org/reference/datamodel.html#invoking-descriptors) realiza esta búsqueda dinámica de atributos. Es lo que difiere el acceso de los atributos a las superclases también. –
Sí, aunque también podría escribir un ejemplo usando '__getattr__'. – katrielalex