回到首页

python里动态加载其他模块的类实例

test.py

class A:
	def __init__(self):
		self.a=1

import importlib

def dynamic_import(import_path):
	module_name,objname=import_path.split(':')
	m=importlib.import_module(module_name)
	print(m.__dict__)
	print(m.__dir__)
	return getattr(m,objname)

if __name__=='__main__':
	ia=A()
	with open('test5.py') as f:
		with open('test4.py','w') as f1:
			f1.write(f.read())
	ib=dynamic_import('test4:B')
	t=()
	d={'c':6}
	ibi=ib(*t,**d)
	print(ib.__dict__)
	print(ibi.b)
	print(ibi.c)

test5.py

class B:
	def __init__(self,c=4):
		self.b=5
		self.c=c

def funcc():
	pass

def funcd():
	pass

python真的太好用了,或者所有语言都能这样用?使用importlib库加载模块,getattr获取模块的属性方法节点,再运行,获得实例。动态加载其他模块的函数也是差不多的处理方式。

本文dynamic_import代码来自espnet/espnet/utils/dynamic_import.py

本文创建于2022.11.23/17.11,修改于2022.11.27/9.39