problème d'utilisation d'une instance dans une instruction with_statement
-
19-08-2019 - |
Question
J'ai récemment commencé à apprendre le python et j'ai atteint l'instruction avec . J'ai essayé de l'utiliser avec une instance de classe, mais je pense que je fais quelque chose de mal. Voici le code:
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()
En réalité, lorsque l'interprète atteint la méthode ok dans l'instruction with, l'exception suivante est générée:
Traceback (most recent call last):
File "dec.py", line 23, in
g.ok()
AttributeError: 'NoneType' object has no attribute 'ok'
Pourquoi l’objet g a-t-il le type NoneType? Comment utiliser une instance avec l'instruction avec ?
La solution
Votre méthode __ enter __
doit renvoyer l'objet à utiliser pour le " en tant que g
" une partie de la déclaration avec. Consultez la documentation , où il est indiqué:
- Si une cible était incluse dans l'instruction with, la valeur renvoyée par
__ enter __ ()
lui est affectée.
Actuellement, il n'a pas d'instruction return, donc g est lié à Aucun
(valeur de retour par défaut)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow