如果一個對象是一個模塊的類或函數,我需要檢索絕對導入路徑作爲一個字符串。例如:檢查從對象導入路徑字符串
>>> from a.b.c import foo
>>> get_import_path(foo)
'a.b.c.foo'
我試圖調查inspect模塊,但沒有什麼可以做的。
如果一個對象是一個模塊的類或函數,我需要檢索絕對導入路徑作爲一個字符串。例如:檢查從對象導入路徑字符串
>>> from a.b.c import foo
>>> get_import_path(foo)
'a.b.c.foo'
我試圖調查inspect模塊,但沒有什麼可以做的。
什麼你正在嘗試做的本質上是不可能的。 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'
也許你應該問你*真的*想要回答的問題。 – 2011-06-11 20:25:13
@Ignacio,我認爲問題是如何實現'get_import_path'。 – khachik 2011-06-11 20:28:59
@khachik:除了通常自己不知道的有用之外,這意味着[這是沒有被問到的真正的問題](http://mywiki.wooledge.org/XyProblem)。 – 2011-06-11 20:30:27