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

时间:2018-07-08 00:58:56

标签: python python-3.x class

如何从一系列不同的类实例化对象,每个类在不同的模块中定义?像这样:

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()

3 个答案:

答案 0 :(得分:1)

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

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]

答案 1 :(得分:0)

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

def succ: Stream[Int] => Int = {
  case Stream() => 0
  case str =>
    str.zip(str.tail).
    find { case (l, r) => l == r }.
    map { case (x, _) => x }.
    getOrElse(0)
}

答案 2 :(得分:0)

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

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

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