Python: comportamiento de anulación de clase “es”

Estoy escribiendo una clase que encapsula cualquier objeto arbitrario, incluyendo tipos simples. Quiero que la palabra clave “es” opere en el valor encapsulado, como este comportamiento:

Wrapper(True) is True -> True Wrapper(False) is True -> False Wrapper(None) is None -> True Wrapper(1) is 1 -> True 

¿Hay algún método de objeto que pueda anular para obtener este comportamiento?

No. is , and , y no puede ser sobrecargado.

Generalmente, si desea probar la igualdad en términos de valor (si x es 1, o Verdadero o Ninguno), use el operador == todos modos. Si desea usar el operador is , generalmente está probando si algo se refiere a otra cosa, como list1 is list2 .

Si desea definir un comportamiento especial para == , puede definir __eq__ en su definición de clase.

is sí mismo no se puede sobrecargar, pero puede que te interesen otros métodos mágicos de “Reflexión” que pueden ser adecuados para tu caso de uso (ya que estás viendo este hilo):

__instancecheck__(self, instance) Comprueba si una instancia es una instancia de la clase que definió (por isinstance(instance, class) .

__subclasscheck__(self, subclass) Comprueba si una clase subclasifica la clase que definió (por ejemplo, issubclass(subclass, class) ).

No. is , and , y no puede ser sobrecargado.

En efecto. Creo que las palabras clave están reservadas y no se pueden sobrecargar ni cambiar.

Consulte: http://docs.python.org/2/reference/lexical_analysis.html#keywords

“Los siguientes identificadores se usan como palabras reservadas, o palabras clave del idioma, y ​​no pueden usarse como identificadores comunes”.

La lista es: [‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘ exec ‘,’ finally ‘,’ for ‘,’ from ‘,’ global ‘,’ if ‘,’ import ‘,’ in ‘,’ is ‘,’ lambda ‘,’ not ‘,’ or ‘,’ pass ‘ , ‘imprimir’, ‘boost’, ‘devolver’, ‘intentar’, ‘while’, ‘con’, ‘rendimiento’]

Esta lista se puede ver a través del comando

keyword.kwlist

(No olvide importar la palabra clave primero)

También:

keyword.iskeyword (‘is’)

Devuelve verdadero


Actualizar:

Mi respuesta fue mala y debería sentirme mal.

Me he metido con del mismo. No sé por qué no me di cuenta de que …

2do bash:

La siguiente documentación proporciona una lista completa de comportamiento personalizable en las clases. Esto incluye todos los métodos para anular y sobrecargar a los operadores. ‘is’ no está incluido.

http://docs.python.org/2/reference/datamodel.html#special-method-names

Lo mejor que puedo hacer.