有例如以下的结构:
│ dynamic.py
│
└─a
│ aClass.py
│ utils.py
└─__init__.py
aClass.py:
class aClass:
def method(self, type):
return f"{type} return by aClass.method"
@staticmethod
def staticmethod(type):
return f"{type} return by staticmethod"
utils.py:
def testMethod(type):
return f'{type} testMethod()'
dynamic.py:
import importlib
module = importlib.import_module('a.aClass') #绝对导入
print(module.aClass().method('默认调用'))
print(module.aClass.staticmethod('默认调用'))
#module = importlib.import_module('.aClass', 'a') #相对导入
args = ['动态调用']
kwargs = {}
result = eval("module.aClass().method")(*args, **kwargs)
print(result)
result = eval("module.aClass.staticmethod")(*args, **kwargs)
print(result)
module = importlib.import_module('a.utils')
print(module.testMethod('默认调用'))
result = eval("module.testMethod")(*args, **kwargs)
print(result)
执行dynamic.py的输出结果:
默认调用 return by aClass.method
默认调用 return by staticmethod
动态调用 return by aClass.method
动态调用 return by staticmethod
默认调用 testMethod()
动态调用 testMethod()
相关链接
importlib --- import 的实现:https://docs.python.org/zh-cn/3.7/library/importlib.html
eval:https://docs.python.org/zh-cn/3.7/library/functions.html#eval