我有类名列表,想要动态创建它们的实例.例如:
names=[
'foo.baa.a',
'foo.daa.c',
'foo.AA',
....
]
def save(cName, argument):
aa = create_instance(cName) # how to do it?
aa.save(argument)
save(random_from(names), arg)
Run Code Online (Sandbox Code Playgroud)
如何在Python中动态创建该实例?谢谢!
ele*_*nso 46
假设您已经使用类似的东西导入了相关的类
from [app].models import *
Run Code Online (Sandbox Code Playgroud)
你需要做的就是
klass = globals()["class_name"]
instance = klass()
Run Code Online (Sandbox Code Playgroud)
这对我有用:
from importlib import import_module
class_str: str = 'A.B.YourClass'
try:
module_path, class_name = class_str.rsplit('.', 1)
module = import_module(module_path)
return getattr(module, class_name)
except (ImportError, AttributeError) as e:
raise ImportError(class_str)
Run Code Online (Sandbox Code Playgroud)
您可以使用python内置eval()语句来实例化您的类.像这样:
aa = eval(cName)()
Run Code Online (Sandbox Code Playgroud)
您通常可以完全避免使用字符串处理。
import foo.baa
import foo.AA
import foo
classes = [ foo.baa.a, foo.daa.c, foo.AA ]
def save(theClass, argument):
aa = theClass()
aa.save(argument)
save(random.choice(classes), arg)
Run Code Online (Sandbox Code Playgroud)
请注意,我们不使用类名称的字符串表示形式。
在Python中,您可以只使用类本身。
| 归档时间: |
|
| 查看次数: |
73693 次 |
| 最近记录: |