动态创建课程

时间:2015-11-06 14:39:46

标签: python class

我有一个函数,它返回两个列表,符号和数据,其中相应的值具有相同的索引。例如,symbols[i]提供变量名称,data[i]给出实际值(int)。

我想使用这两个列表动态创建一个具有以下格式的静态值的类:

class a:

    symbols[i] = data[i]
    symbols[i+1] = data[i+1]

等等,以便我以后可以参考这样的值:

a.symbols[i]
a.symbols[i+1] 

其中symbols[i]symbols[i+1]应替换为所需的变量名称,例如a.var1a.var2

如何实现这一目标?

编辑:在下面添加了详细信息

所以我有一个主程序让我们说def main()应该在这个样式的list.dat中读取:

dimension1;0.1
dimension2;0.03
dimension3;0.15

并将值分隔为符号和数据列表。

所以我不知道这些列表中有多少值。我想动态创建一个类,以便能够引用主程序中的值,并将类作为参数提供给子类,如def sub1(NewClass,argument1,argument2)等。目前我正在使用手动创建了以下格式的简单python列表(list.py):

dimension1 = 0.1
dimension2 = 0.03
dimension3 = 0.15

然后在主程序和子函数中使用list import *,这会导致SyntaxWarning告诉我import *只允许在模块级别使用。所以我真正想要的是一种智能且一致的方式来处理参数列表并将其转移到另一个函数

2 个答案:

答案 0 :(得分:1)

您可以使用type动态创建一个类。如果我理解你想在这里实现的目标,你的代码将如下所示:

my_classes = []
for i in range(0, len(data), 2):
    my_classes.append(
        type('A%d' % i, (), {'var1': data[i], 'var2': data[i+1]})
    )

答案 1 :(得分:1)

我怀疑你真正想要的,重新阅读说明,是使用type如下:

NewClass = type('NewClass', (object,), dict(zip(symbols, data)))

给出一个最小的例子:

>>> symbols = 'foo bar baz'.split()
>>> data = range(3)

结果将是:

>>> NewClass.foo
0
>>> NewClass.bar
1
>>> NewClass.baz
2

使用zip,您可以轻松地从键列表和相关值列表中创建字典,您可以将其用作新类的__dict__

但是,不清楚为什么你希望它成为,具体而言。