动态导入 - Python - 调用函数不起作用

时间:2016-06-26 06:04:30

标签: python reflection

我在动态导入类并尝试在所述类中运行函数时遇到了一些麻烦。这是我的问题,具体而言。

我在名为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_modulepydoc.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'

目录结构如下

Directory Structure of Project

scripts文件夹中的 init .py为空。

我已经尝试了Stackoverflow中的几乎所有解决方案,但我对此感到有些不安。我做错了什么?

1 个答案:

答案 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