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