문제

나는 최근에 파이썬을 배우기 시작했고 ~와 함께 성명 . 클래스 인스턴스와 함께 사용하려고했지만 뭔가 잘못하고 있다고 생각합니다. 코드는 다음과 같습니다.


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 명령문 내부의 메소드 : 다음 예외가 제기됩니다.


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

g 객체에 유형이 아닌 유형이있는 이유는 무엇입니까? 인스턴스를 어떻게 사용할 수 있습니까? ~와 함께 성명 ?

도움이 되었습니까?

해결책

당신의 __enter__ 메소드는 사용해야 할 객체를 반환해야합니다.as g"with 문의 일부. 참조 선적 서류 비치, 여기서 언급 된 곳 :

  • 대상이 with 문에 포함 된 경우 __enter__() 그것에 할당됩니다.

현재 반환 명령문이 없으므로 G는 None (기본 반환 값)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top