problema durante l'utilizzo di un'istanza in with_statement
-
19-08-2019 - |
Domanda
Di recente ho iniziato a studiare Python e ho raggiunto l'istruzione con . Ho provato a usarlo con un'istanza di classe, ma penso che sto facendo qualcosa di sbagliato. Ecco il codice:
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()
Il fatto è che quando l'interprete raggiunge il metodo ok all'interno dell'istruzione with, viene sollevata la seguente eccezione:
Traceback (most recent call last):
File "dec.py", line 23, in
g.ok()
AttributeError: 'NoneType' object has no attribute 'ok'
Perché l'oggetto g ha il tipo NoneType? Come posso utilizzare un'istanza con l'istruzione with ?
Soluzione
Il tuo metodo __enter__
deve restituire l'oggetto che dovrebbe essere usato per " come g
" parte della dichiarazione with. Consulta la documentazione , dove afferma:
- Se una destinazione è stata inclusa nell'istruzione with, viene assegnato il valore restituito da
__enter __ ()
.
Attualmente non ha alcuna dichiarazione di ritorno, quindi g viene associato a None
(il valore di ritorno predefinito)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow