2011-01-29 5 views
13

parece que no entiendo algo con --- la instrucción python with.el objetivo de la declaración `with` de python es inesperadamente Ninguno

considerar esta clase:

class test(object): 
    def __enter__(self): pass 
    def __exit__(self, *ignored): pass 

ahora, cuando se utiliza con with, como en

with test() as michael: 
    print repr(michael) 

Yo esperaría alguna salida como ejemplo < prueba en bla memore >. Pero obtengo Ninguna.

¿Algo está mal aquí? Cualquier sugerencia ayudaría.

(estoy usando Python 2.6.6.)

EDIT:

Gracias a ephement por dirigirme a la documentación. El método __enter__ debe leer

def __enter__(self): return self 

Respuesta

18

De la documentación with:

Si un objetivo se incluye en el estado with, el valor de retorno de __enter__() es asignado a la misma.

Si def __enter__(self): return self, entonces se produce la salida esperada.

2

De the docs:

object.__enter__(self)

Entre en el contexto de ejecución relacionados con este objeto. La declaración with vinculará el valor de retorno de este método con el objetivo (s) especificado en la cláusula as de la instrucción, si corresponde.

-1

tengo la misma cosa para repr(michael)

Tal vez puedas probar:

m.__repr__() 

No estoy del todo seguro, pero creo que tiene algo que ver con el hecho de que usted no ha 't definido el método repr en su test clase

+0

No, 'object .__ repr__' se usa: –

Cuestiones relacionadas