Python动态加载模块、类、函数的几种方式

1. exec()

使用exec来执行Python导入模块的命令。

module_name = "module01"
exec("import " + module_name)
module01.echo()

2. __import__()

单独使用__import__() 可以直接加载模块,但是当需要动态加载类、函数时,就需要配合getattr来实现。
实现步骤:

  1. 获取模块名(module_name)
  2. 使用__import__(module_name)导入Python模块
  3. 使用getattr(module_name, class_name/function_name)获取类、方法的对象 例子:

模块(module01.py)中包含一个Index类和一个echo方法。主程序(main.py)使用模块名动态调用其echo方法。

module01.py:

class Index:
    def echo(self, content):
        print(self)
        print(content)

main.py:

module_name = "module01"
class_name = "Index"
function_name = "echo"

module_object = __import__(module_name) #将模块加载为对象
module_class = getattr(module_object, class_name) #获取模块当中的类对象
module_class_object = module_class() #将类实例化
module_class_object.echo("Hello World") #调用echo方法

此外,还可以这样调用类中的函数:

main.py:

module_name = "module01"
class_name = "Index"
function_name = "echo"

module_object = __import__(module_name) #将模块加载为对象
module_class = getattr(module_object, class_name) #获取模块当中的类对象
module_function = getattr(module_class, function_name) #获取类中方法对象
module_function("Hello World")
# 或者直接 module_class.echo()
# 需要注意的是,使用这种方式调用方法,方法的参数值不需要加self。

3. importlib

这种方式其实是__import__() 方式的扩展。Python官方文档推荐程序式地导入模块时应该使用 import_module() 而不是__import__

实现动态加载的方式与第二种类似:

module01.py

class Index:
    def echo(self, content):
        print(self)
        print(content)

main.py

import importlib

module_name = "module01"
class_name = "Index"

module_object = importlib.import_module(module_name) #将模块加载为对象
module_class_object = module_object.Index() #将类实例化
module_class_object.echo("Hello World") #调用echo方法

(同样的这里可以配合getattr()使用)

使用importlib的一个好处就是还可以使用reload方法。在模块已经被导入的情况下,使用importlib.reload导入新的模块。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇