2011-03-30 4 views

답변

3

번호

>>> 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__) 

가끔은 원하는대로 할 수 있습니다.

1

적어도 부수적 인 호출 가능 객체 (또는 다른 객체)는 사용할 수 없습니다. 소스 코드를 찾으려고 할 수 있으며 심지어 많은 경우이 작업을 수행 할 수있는 a function in the standard library이 있습니다. 그러나 I/O 모듈은 C로 작성된 것이므로 repository으로 가서 검색해야합니다.

관련 문제