如何在Python中动态加载模块或类
Python提供了一个功能来创建和存储类和方法,并存储它们以供进一步使用。包含这些方法和类集的文件称为模块。一个模块里面可以有其他模块。
注意:有关详细信息,请参阅Python模块
示例:导入模块的简单示例如下所示,其中在同一目录下有两个文件,分别是 module.py 和 importing_mod.py。 module.py 文件充当 import_mod.py 文件的模块。
模块.py
# welcome method in the module
def welcome(str):
print("Hi ! % s Welcome to GfG" % str)
import_mod.py 文件
# importing module.py file
import module as mod
# running the welcome method
mod.welcome("User_1")
输出
Hi! User_1 Welcome to GfG
动态加载模块或类
上面代码中添加的模块是静态导入模块,即在编译时。在Python中,我们可以通过两种方式动态导入模块
- 通过使用 __import__() 方法:
__import__()
是一个 dunder 方法(以双下划线开头和结尾的类方法也称为魔术方法)并且所有类都拥有它。它用于在类的实例中导入模块或类。下面给出了这个方法的一个例子,我们将在其中动态导入一个模块。模块文件现在修改为:模块.py
# class inside the module class Welcome: def welcome(str): print("Hi ! % s Welcome to GfG" % str)
动态导入.py
class Dimport: def __init__(self, module_name, class_name): #__import__ method used # to fetch module module = __import__(module_name) # getting attribute by # getattr() method my_class = getattr(module, class_name) my_class.welcome('User_1') # Driver Code obj = Dimport("module", "Welcome")
输出
Hi! User_1 Welcome to GfG
- 使用 imp 模块:模块可以通过Python中的 imp 模块动态导入。下面的示例是使用 imp 模块的演示。它提供了
find_module()
方法来查找模块和 import_moduleimport_module()
方法来导入它。动态导入.py
import imp import sys # dynamic import def dynamic_imp(name, class_name): # find_module() method is used # to find the module and return # its description and path try: fp, path, desc = imp.find_module(name) except ImportError: print ("module not found: " + name) try: # load_modules loads the module # dynamically ans takes the filepath # module and description as parameter example_package = imp.load_module(name, fp, path, desc) except Exception as e: print(e) try: myclass = imp.load_module("% s.% s" % (name, class_name), fp, path, desc) except Exception as e: print(e) return example_package, myclass # Driver code if __name__ == "__main__": mod, modCl = dynamic_imp("GFG", "addNumbers") modCl.addNumbers(1, 2)
输出
Hi! User_1 Welcome to GfG