2011-07-06 7 views
6

tengo la (ejemplo) siguiente código:Python __repr__ para números?

class _1DCoord(): 
    def __init__(self, i): 
     self.i = i 

    def pixels(self): 
     return self.i 

    def tiles(self): 
     return self.i/TILE_WIDTH 

Lo que quiero hacer es lo siguiente:

>>> xcoord = _1DCoord(42) 
>>> print xcoord 
42 

Pero en lugar de eso ver esto:

>>> xcoord = _1DCoord(42) 
>>> print xcoord 
<_1DCoord instance at 0x1e78b00> 

He intentado utilizar __repr__ de la siguiente manera:

def __repr__(self): 
    return self.i 

Pero __repr__ solo puede devolver una cadena. ¿Hay alguna manera de hacer lo que estoy tratando de hacer, o debería simplemente renunciar y usar pixels()?

Respuesta

9
def __repr__(self): 
    return repr(self.i) 
+0

Ah ! ¡Gracias una tonelada! También tuve que definir \ _ \ _ add \ _ \ _, \ _ \ _ sub \ _ \ _ etc. para poder trabajar con el valor devuelto (me estaba dando errores de tipo), pero eso funciona perfectamente. –

5

Pero __repr__ sólo puede devolver una cadena.

Así que sólo lo hacen

def __repr__(self): 
    return str(self.i) # or repr(self.i) 

O, para imitar el formato habitual de Python:

def __repr__(self): 
    return '_1DCoord(%i)' % self.i 
6

Creo que esto es lo que está buscando:

class _1DCoord(): 
    def __init__(self, i): 
     self.i = i 

    def __repr__(self): 
     return '_1DCoord(%i)' % self.i 

    def __str__(self): 
     return str(self.i) 

>>> xcoord = _1DCoord(42) 
>>> xcoord 
_1DCoord(42) 
>>> print xcoord 
42