繁体   English   中英

如何使用for循环实例化类列表?

[英]How to instantiate a list of classes using for loop?

如何从不同类的列表中实例化对象,每个类在不同的模块中定义? 就像是:

a.py

class a():
    def __init__():
        print('a called')

b.py

class b():
    def __init__():
        print('b called')

main.py

import a
import b

classes = ['a', 'b']

for class in classes:
    class = class()

假设您在编写程序时了解所有类(即您没有在运行时动态发现它们),则可以将创建内容放入列表文字中:

from a import a
from b import b

objects = [a(), b()]

如果要从某个地方获取一些类列表,那么就像遍历该列表并调用每个类一样简单。

import a
import b

classes = [a.a, b.b]
objects = [cls() for cls in classes]

这些类是否需要由字符串列表引用? 您可以这样做:

classes = [a.a, b.b]
for cls in classes:
    class_instance = cls()

如果用户输入了类名,则需要处理字符串,就像在最初的示例中,在字符串列表中使用类名的定义一样。 在这种情况下,请使用eval(classname)获取eval(classname)的构造函数/初始化。

from a import a
from b import b
classnames = ["a", "b"]
instances = [eval(n)() for n in classnames]

PS:您在init -definitions中忘记了self,这会导致出现以下错误: __init__()takes 0 positional arguments but 1 was given init __init__()takes 0 positional arguments but 1 was given

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM