poo objeto metodos instancias instanciar funciones ejemplo clases clase python string python-3.x printing

objeto - poo python 3



¿Cómo cambio la representación de cadena de una clase de Python? (2)

En Java, puedo anular el método toString() de mi clase. Luego, la función de impresión de Java imprime la representación de cadena del objeto definido por su toString() . ¿Existe un Python equivalente a toString() Java?

Por ejemplo, tengo una clase de PlayCard. Tengo una instancia c de PlayCard. Ahora:

>>> print(c) <__main__.Card object at 0x01FD5D30>

Pero lo que quiero es algo así como:

>>> print(c) A♣

¿Cómo personalizo la representación de cadena de mis instancias de clase?

Estoy usando Python 3.x


El equivalente más cercano a toString de Java es implementar __str__ para su clase. Pon esto en tu definición de clase:

def __str__(self): return "foo"

Es posible que también desee implementar __repr__ para ayudar en la depuración.

Vea aquí para más información:


Esto no es tan fácil como parece, algunas funciones básicas de la biblioteca no funcionan cuando solo se sobreescribe str (comprobado con Python 2.7), vea este hilo de ejemplos Cómo hacer una clase JSON serializable También, intente esto

import json class A(unicode): def __str__(self): return ''a'' def __unicode__(self): return u''a'' def __repr__(self): return ''a'' a = A() json.dumps(a)

produce

''""''

y no

''"a"''

como se esperaría

EDITAR : respondiendo el comentario de mchicago:

Unicode no tiene ningún atributo: es una cadena inmutable, cuyo valor está oculto y no está disponible en el código de Python de alto nivel. El módulo json usa re para generar la representación de cadena que parece tener acceso a este atributo interno. Aquí hay un ejemplo simple para justificar esto:

b = A(''b'') print b

produce

''a''

mientras

json.dumps({''b'': b})

produce

{"b": "b"}

entonces verá que la representación interna es utilizada por algunas bibliotecas nativas, probablemente por razones de rendimiento.

Ver también esto para más detalles: http://www.laurentluce.com/posts/python-string-objects-implementation/