Хотя я обычно соглашался с тем, что inspect
является хорошим ответом, он падает, когда ваш класс (и, следовательно, метод класса) был определен в интерпретаторе.
Если вы используете dill.source.getsource
из dill
вы можете получить источник функций и лямбда, даже если они определены интерактивно. Он также может получить код для связанных или несвязанных методов и функций класса, определенных в карри ... однако вы не сможете скомпилировать этот код без кода объекта-объекта.
>>> from dill.source import getsource
>>>
>>> def add(x,y):
... return x+y
...
>>> squared = lambda x:x**2
>>>
>>> print getsource(add)
def add(x,y):
return x+y
>>> print getsource(squared)
squared = lambda x:x**2
>>>
>>> class Foo(object):
... def bar(self, x):
... return x*x+x
...
>>> f = Foo()
>>>
>>> print getsource(f.bar)
def bar(self, x):
return x*x+x
>>>
Для builtin
, функции dill.source
не будут работать ... HOWEVER ...
Вам все равно не придется прибегать к использованию вашего любимого редактора, чтобы открыть файл с исходным кодом (как это предлагается в других ответах) ). Существует новый пакет под названием cinspect
, целью которого является просмотр источника для builtins
.
Вы используете numpy 1.16? Это несовместимо с последним выпуском pytables (см. https://github.com/PyTables/PyTables/blob/v3.4.4/tables/hdf5extension.pyx#L2155 ), но команда pytables еще не выпустила исправленную версию: https://github.com/PyTables/PyTables/issues/719
Единственный способ, который я нашел, чтобы исправить это, - понизить рейтинг numy.