질문이 거의 다 나와 있습니다.파이썬 인터프리터에서 __enter __() 함수 뒤에있는 코드를 살펴볼 방법이 있습니까?
내가 이런 식의 코드를보고 싶습니다. (다른 파이썬 소스 코드를보고보다)
>>>f = open("x.txt")
>>>print contents of f.__enter__() #<- how can I do this?
질문이 거의 다 나와 있습니다.파이썬 인터프리터에서 __enter __() 함수 뒤에있는 코드를 살펴볼 방법이 있습니까?
내가 이런 식의 코드를보고 싶습니다. (다른 파이썬 소스 코드를보고보다)
>>>f = open("x.txt")
>>>print contents of f.__enter__() #<- how can I do this?
번호
>>> f = open("x.txt")
>>> f.__enter__
<built-in method __enter__ of file object at 0x022E4E90>
그래서 __enter__
의 구현입니다 파이썬의 C 코드 어딘가에.
실제로는 Objects/fileobject.c
에 있습니다. in the Python source tree [주 : 2.7 분기의 현재 최신 것으로 생각됩니다. 거기에 링크하는 더 좋은 방법이있을 것입니다. 코드를 보면 실질적으로 f.__enter__
은 f
을 반환합니다. 물론 이것은이 특별한 경우에서 일어나는 일입니다. 다른 객체의 __enter__
메소드는 완전히 다른 작업을 수행합니다.
이 경우 __enter__
메서드가 네이티브 코드 인 경우가 발생합니다. 다른 것들은 파이썬 코드 일지 모르지만 파이썬 안에서는 일반적으로 볼 수 없다.
>>> import decimal
>>> decimal.localcontext().__enter__
<bound method _ContextManager.__enter__ of <decimal._ContextManager object at 0x02192B50>>
그건 원시 코드가 아니라 파이썬 바이트 코드입니다.
import dis
dis.dis(decimal.localcontext().__enter__)
원래 파이썬 소스 코드를 사용할 수 있다고 보장 할 수는 없습니다. 하지만 시도해 볼 수 있습니다 :
import inspect
print inspect.getsource(decimal.localcontext().__enter__)
가끔은 원하는대로 할 수 있습니다.
적어도 부수적 인 호출 가능 객체 (또는 다른 객체)는 사용할 수 없습니다. 소스 코드를 찾으려고 할 수 있으며 심지어 많은 경우이 작업을 수행 할 수있는 a function in the standard library이 있습니다. 그러나 I/O 모듈은 C로 작성된 것이므로 repository으로 가서 검색해야합니다.