我在动态导入类并尝试在所述类中运行函数时遇到了一些麻烦。这是我的问题,具体而言。
我在名为dyn_imports.py
的导演中有一个python脚本dynamic_imports
。在此文件夹中有一个名为scripts
的子目录。在这个脚本目录中有一个__init__.py
和一个名为AbhayScript.py
的python类。在课程AbhayScript
中,有一个名为say_hello()
我的目标是:从dyn_imports.py
开始,我希望能够导入scripts.AbhayScript
并在say_hello()
AbhayScript
函数
到目前为止,我尝试了各种选项,包括__import__
,importlib.import_module
和pydoc.locate
。所有这些选项都允许我访问module
AbhayScript但是当我尝试getattrs()
或尝试调用该对象时,我收到一条错误,指出它不可调用或没有属性。
dyn_imports.py - 我的一个实验
myclass = 'scripts.AbhayScript'
import importlib
mymod = importlib.import_module(myclass)
mod,newclass = myclass.rsplit('.',1)
ncls = getattr(mod,newclass) #throws an AttributeError that 'str' object has no attribute
AbhayScript.py代码
class AbhayScript(object):
def say_hello(self):
print 'Hello Abhay Bhargav'
目录结构如下
scripts文件夹中的 init .py为空。
我已经尝试了Stackoverflow中的几乎所有解决方案,但我对此感到有些不安。我做错了什么?
答案 0 :(得分:1)
我意识到我做错了什么。我导入了模块而没有引用getattr
函数中的类。我在__import__
函数和getattr
函数中明确了类声明,然后我可以访问类中的函数
这里是dyn_imports.py中的代码
myclass = 'scripts.AbhayScript'
mod = __import__(myclass, fromlist = ['AbhayScript']) #class explicit
klass = getattr(mod, 'AbhayScript') #explicit class
klass().say_hello() #calls the function as desired