problema usando um exemplo em um with_statement
-
19-08-2019 - |
Pergunta
Eu comecei recentemente para aprender python, e eu alcancei o com comunicado. Eu tentei usá-lo com uma instância de classe, mas eu acho que eu estou fazendo algo errado. Aqui está o 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()
A coisa é que, quando o intérprete atinge o OK método dentro do com a declaração, a seguinte exceção é gerada:
Traceback (most recent call last):
File "dec.py", line 23, in
g.ok()
AttributeError: 'NoneType' object has no attribute 'ok'
Por que o objeto g ter o tipo NoneType? Como posso usar uma instância com o com declaração?
Solução
Seu método __enter__
precisa retornar o objeto que deve ser usado para a parte "as g
" do com a declaração. Veja a documentação, onde ele afirma:
- Se um alvo foi incluído no com a declaração, o valor de retorno de
__enter__()
é atribuído a ele.
Atualmente, não tem instrução de retorno, então g fica obrigado a None
(o valor de retorno padrão)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow