我有一个子模块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