Problem einer Instanz in einem with_statement Verwendung
-
19-08-2019 - |
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?
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