我有一個子模塊db.db_1
稱爲prepared_db
功能:導入它的名字的子模塊從一個模塊
from spam import db
submodule_name = "db_1"
func_name = "prepare_db"
func = ...
我怎麼可以得到由子模塊的名稱和功能名稱的功能在上面的背景?
UPDATE:
爲了應對@histrio的回答,我可以證實他的代碼適用於os
模塊。但在這種情況下它不起作用。要創建示例:
$ mkdir -p spam/db
$ cat > spam/db/db_1.py
def prepare_db():
print('prepare_db func')
$ touch spam/db/__init__.py
$ PYTHONPATH=$PYTHONPATH:spam
現在,你可以正常執行導入:
>>> from spam.db.db_1 import prepare_db
>>> prepare_db()
prepare_db func
,但如果你這樣做動態的,我得到這個錯誤:
>>> getattr(getattr(db, submodule_name), func_name)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-9-1b6aa1216551> in <module>()
----> 1 getattr(getattr(db, submodule_name), func_name)
AttributeError: module 'spam.db.db_1' has no attribute 'prepared_db'
我曾嘗試過你的建議,但它並沒有真正起作用。請參閱最新的問題。 – RNA
答覆已更新。確實你的情況有點複雜:) – histrio
你有解釋爲什麼它在'os'模塊中工作,但不是我的情況? – RNA