python 动态加载代码_python动态加载模块

本文介绍了如何在Python中动态导入模块,包括直接导入和相对导入。当模块间存在依赖时,需要确保它们在同一包内,并使用`importlib.import_module`进行动态导入。通过示例代码展示了如何获取模块中的函数或类并执行。
摘要由CSDN通过智能技术生成

1 该模块没有调用其他模块

如当前目录下有个add.py文件,文件内容如下:

def add(a, b):

return a + b

在当前测试文件中写如下测试代码:

def test_func():

module = __import__('add')

func = getattr(module, "add")

print(type(func))

print(func(1, 2))

打印:

说明:

可以看出,只需要通过__import__导入模块即可,再通过getattr即可获取模块中的函数或者类,调用即可

2 该模块相对导入了其他模块

如文件operation.py如下:

from .add import add

class Operation(object):

def __init__(self, a, b):

self.a = a

self.b = b

def add(self):

return add(self.a, self.b)

可以看出,相对导入了add模块,若还是使用之前的方式执行动态加载,会报错。

正确使用方式为,将要导入的模块,和依赖模块放在同一个包中,如:

+ ti

_ operation.py

- add.py

- __init__.py

- main.py

在main.py中可以这样测试:

def test_module():

try:

import os

import importlib

module = importlib.import_module('.operation', 'ti')

operation_class = getattr(module, "Operation")

print(type(operation_class))

print(operation_class(1, 2))

print(operation_class(1, 2).add())

except (EnvironmentError, SyntaxError) as err:

print(err)

这里通过importlib.import_module动态导入,分别为模块名和包名,然后找到Operation类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值