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 ?

Était-ce utile?

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
scroll top