with_statementでインスタンスを使用する際の問題
-
19-08-2019 - |
質問
最近、Pythonを学び始め、 with ステートメントに到達しました。クラスインスタンスでそれを使用しようとしましたが、私は何か間違っていると思います。コードは次のとおりです。
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()
問題は、インタープリターがwithステートメント内の ok メソッドに到達すると、次の例外が発生することです:
Traceback (most recent call last):
File "dec.py", line 23, in
g.ok()
AttributeError: 'NoneType' object has no attribute 'ok'
gオブジェクトのタイプがNoneTypeなのはなぜですか? with ステートメントでインスタンスを使用するにはどうすればよいですか?
解決
__enter__
メソッドは、<!> quot; as g
<!> quot;に使用するオブジェクトを返す必要があります。 withステートメントの一部。 ドキュメントを参照してください:
- withステートメントにターゲットが含まれている場合、
__enter__()
からの戻り値が割り当てられます。
現在、returnステートメントがないため、gはNone
(デフォルトの戻り値)にバインドされます
所属していません StackOverflow