如果对象是模块的类或函数,我需要将绝对导入路径作为字符串检索。例子:
>>> from a.b.c import foo
>>> get_import_path(foo)
'a.b.c.foo'
我试图研究检查模块,但没有什么可做的。
你试图做的事情本质上是不可能的。 foo
根本不知道您是如何导入它的——它甚至可能以多种不同的方式导入。我的 Linux 机器上的示例:
>>> from os.path import normpath
>>> from posixpath import normpath as normpath2
>>> normpath is normpath2
True
所以normpath
和normpath2
是同一个函数对象。无法推断出它们是以何种方式导入的信息。
也就是说,有时查看__module__
函数的属性可能会有所帮助:
>>> normpath.__module__
posixpath
>>> normpath2.__module__
posixpath
该__module__
属性并不总是被定义,如果它被定义,它并不总是包含您正在寻找的信息。
使用__file__
属性:
>>> import string
>>> string.__file__
'/usr/lib/python2.6/string.pyc'