質問

最近、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(デフォルトの戻り値)にバインドされます

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top