El objetivo de la declaración de Python 'con' es inesperadamente ninguno
-
27-10-2019 - |
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
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 elas
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