检查对象的导入路径字符串

3 投票
2 回答
714 浏览
提问于 2025-04-16 19:23

如果一个对象是某个模块的类或函数,我需要把它的绝对导入路径拿到,格式是字符串。举个例子:

>>> from a.b.c import foo
>>> get_import_path(foo)
'a.b.c.foo'

我试着查看一下inspect模块,但发现没有办法做到这一点。

2 个回答

0

使用 __file__ 属性:

>>> import string
>>> string.__file__
'/usr/lib/python2.6/string.pyc'
4

你想要做的事情本质上是不可能的。foo根本不知道你是怎么导入它的——它可能是通过多种不同的方式导入的。举个例子,在我的Linux电脑上:

>>> from os.path import normpath
>>> from posixpath import normpath as normpath2
>>> normpath is normpath2
True

所以normpathnormpath2其实是同一个函数对象。我们无法推断出它们是以什么方式被导入的。

不过,有时候查看一下函数的__module__属性可能会有帮助:

>>> normpath.__module__
posixpath
>>> normpath2.__module__
posixpath

需要注意的是,__module__属性并不总是存在,即使存在,也不一定包含你想要的信息。

撰写回答