Frage

Ich habe vor kurzem zu lernen, Python, und ich erreichte die mit Anweisung gestartet. Ich habe versucht, es mit einer Klasse-Instanz zu verwenden, aber ich glaube, ich bin etwas falsch zu machen. Hier ist der 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()

Die Sache ist die, dass, wenn der Dolmetscher die erreicht ok Methode innerhalb der with-Anweisung, die folgenden Ausnahme ausgelöst wird:


Traceback (most recent call last):
  File "dec.py", line 23, in 
    g.ok()
AttributeError: 'NoneType' object has no attribute 'ok'

Warum wird die g-Objekt haben den Typ NoneType? Wie kann ich eine Instanz mit der mit Aussage?

War es hilfreich?

Lösung

Ihre __enter__ Methode muss das Objekt zurückzugeben, die für den „as g“ Teil der mit Anweisung verwendet werden sollen. Finden Sie in der Dokumentation , wo es heißt:

  • Wenn ein Ziel in der mit Erklärung aufgenommen wurde, wird der Rückgabewert von __enter__() ihm zugeordneten.

Zur Zeit hat es keine return-Anweisung, so wird g None (der Standardrückgabewert) gebunden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top