problema al usar una instancia en una declaración_con_
-
19-08-2019 - |
Pregunta
Recientemente comencé a aprender Python, y llegué a la declaración con . Intenté usarlo con una instancia de clase, pero creo que estoy haciendo algo mal. Aquí está el código:
from __future__ import with_statement
import pdb
class Geo:
def __init__(self,text):
self.text = text
def __enter__(self):
print "entering"
def __exit__(self,exception_type,exception_value,exception_traceback):
print "exiting"
def ok(self):
print self.text
def __get(self):
return self.text
with Geo("line") as g :
g.ok()
La cuestión es que cuando el intérprete alcanza el método ok dentro de la declaración with, se genera la siguiente excepción:
Traceback (most recent call last):
File "dec.py", line 23, in
g.ok()
AttributeError: 'NoneType' object has no attribute 'ok'
¿Por qué el objeto g tiene el tipo NoneType? ¿Cómo puedo usar una instancia con la declaración con ?
Solución
Su método __enter__
necesita devolver el objeto que debe usarse para " como g
" parte de la declaración con. Consulte la documentación , donde dice:
- Si se incluyó un objetivo en la instrucción with, se le asigna el valor de retorno de
__enter __ ()
.
Actualmente, no tiene una declaración de retorno, por lo que g se vincula a None
(el valor de retorno predeterminado)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow