爲什麼在下面的代碼中我無法從模塊collections
中獲得Callable
的定義?如何獲得模塊中類的定義?
如何獲取模塊中類的定義?謝謝。
>>> from collections import Callable
>>> inspect.getsource(Callable)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/inspect.py", line 944, in getsource
lines, lnum = getsourcelines(object)
File "/usr/lib/python3.5/inspect.py", line 931, in getsourcelines
lines, lnum = findsource(object)
File "/usr/lib/python3.5/inspect.py", line 788, in findsource
raise OSError('could not find class definition')
OSError: could not find class definition
>>> inspect.getsourcelines(Callable)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/inspect.py", line 931, in getsourcelines
lines, lnum = findsource(object)
File "/usr/lib/python3.5/inspect.py", line 788, in findsource
raise OSError('could not find class definition')
OSError: could not find class definition
>>> inspect.getmodule(Callable)
<module 'collections.abc' from '/usr/lib/python3.5/collections/abc.py'>
>>> inspect.getfile(Callable)
'/usr/lib/python3.5/collections/abc.py'
>>> inspect.getsourcefile(Callable)
'/usr/lib/python3.5/collections/abc.py'
謝謝。 'getsourceline'和'getsource'通過'obj .__ module__'找到一個對象'obj'的定義嗎?那麼他們是否需要在Python中定義obj而不是二進制代碼呢? 'getfile'也通過'obj .__ module__'找到一個對象'obj'的文件嗎? – Tim
@Tim yes,'getsourceline'和'getsource'在內部都使用'getfile',如果它是一個類(通過使用'inspect.isclass'來檢查),它就會從'obj'抓取'__module__'。內置模塊(在CPython中用C實現)不能與'inspect'一起使用,所以是的,它們必須在Python中定義。 –