Функция inspect.getsource()
работает только при наличии текстового файла для загрузки исходного кода .
Вы ввели определение класса в интерактивный интерпретатор, который не сохраняет исходный источник при компиляции этого источника в класс памяти и объекты кода.
Поместите определение вашего класса в модуль, импортируйте модуль, и затем используйте inspect.getsource()
.
inspect.getsource()
работает, сначала находя модуль для данного объекта (для классов, просматривая атрибут ClassObj.__module__
для имени модуля, затем получая модуль через sys.modules[modulename]
), затем проверяя, есть ли у модуля __file__
атрибут, по которому можно определить читаемый исходный файл. Если такое имя файла существует и его можно прочитать, то модуль inspect
читает этот файл, чтобы затем искать строку class ClassName:
и выдавать вам все строки с этой точки с одинаковыми или более глубокими отступами. Интерактивный интерпретатор выполняет все в модуле __main__
, и для интерпретатора нет атрибута __file__
, поэтому любые попытки загрузки исходного кода для определенных там объектов просто потерпят неудачу.
Если вы просто хотите узнать, какие члены определяет класс, используйте вместо этого dir()
или help()
на объекте. Вам не нужно видеть полный исходный код для этой информации.