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

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

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

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

2 Solutions collect form web for “есть ли способ взглянуть на код, стоящий за функцией __enter __ () в интерпретаторе python?”

Нет. (Не смотря на исходный код 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, поэтому вам придется искать и искать репозиторий .

  • Странный питон при работе с циклом <сравнение
  • Python: поиск среднего значения вложенного списка
  • Извлечение значения из кортежа, когда другие значения не используются
  • Как преобразовать строку в int или float с приоритетом на int?
  • Статус 405 из очереди задач
  • IOError: файл недоступен в Google AppEngine 1.6.1
  • selenium python «send_keys» с хром-драйвером сбрасывает символы
  • удаление элементов из списка
  • Python - лучший язык программирования в мире.