Pregunta

Parece que no entiendo algo con --- la pitón with declaración.

Considere esta clase:

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

Ahora, al usarlo con with, como en

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

Esperaría algo de salida como u003Ctest instance at memore blah>. Pero entiendo Ninguna.

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

(Estoy usando Python 2.6.6.)

EDITAR:

Gracias aefemento por señalarme la documentación. los __enter__ El método debe leer

    def __enter__(self): return self
¿Fue útil?

Solución

Desde el with documentación:

Si se incluyó un objetivo en el with declaración, el valor de retorno de __enter__() se asigna a él.

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

Otros consejos

De los documentos:

object.__enter__(self)

Ingrese el contexto de tiempo de ejecución relacionado con este objeto. los with La declaración unirá el valor de retorno de este método al objetivo (s) especificado en el as cláusula de la declaración, si la hay.

Entiendo lo mismo para repr(michael)

Prueba esto en su lugar:

m.__repr__()

No estoy completamente seguro, pero creo que tiene algo que ver con el hecho de que no has definido el represas método en tu test clase

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top