如何从一系列不同的类实例化对象,每个类在不同的模块中定义?像这样:
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()
答案 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