есть ли способ взглянуть на код, стоящий за функцией __enter __ () в интерпретаторе python?

вопрос в значительной степени говорит все.

я хотел бы посмотреть на код таким образом:

>>>f = open("x.txt") >>>print contents of f.__enter__() #<- how can I do this? 

Нет. (Не смотря на исходный код Python.)

 >>> f = open("x.txt") >>> f.__enter__ <built-in method __enter__ of file object at 0x022E4E90> 

Таким образом, реализация __enter__ находится где-то внутри C-кода Python.

Это фактически в Objects/fileobject.c который вы можете найти в исходном дереве Python [примечание: я думаю, что это последняя вещь в ветке 2.7; вероятно, есть лучший способ связать его] и, глядя на код, вы увидите, что на самом деле f.__enter__ возвращает f сам. Конечно, это именно то, что происходит в этом конкретном случае; другие методы __enter__ будут делать совершенно разные вещи.

В этом случае бывает, что метод __enter__ является собственным кодом. В других это может быть код Python, но вы все равно не можете видеть его внутри Python.

 >>> import decimal >>> decimal.localcontext().__enter__ <bound method _ContextManager.__enter__ of <decimal._ContextManager object at 0x02192B50>> 

Это байт-код Python, а не собственный код. Вы можете увидеть байт-код:

 import dis dis.dis(decimal.localcontext().__enter__) 

но исходный исходный код Python не будет доступен. Но вы можете попробовать:

 import inspect print inspect.getsource(decimal.localcontext().__enter__) 

которые иногда будут делать то, что вы хотите.

Вы не можете, по крайней мере, не от абратария, вызываемого (или любого другого) объекта. Вы можете попробовать найти исходный код, и есть даже функция в стандартной библиотеке, которая может это сделать во многих случаях. Тем не менее, модули ввода / вывода удобно записывать на C, поэтому вам придется искать и искать репозиторий .