动态创建类

2024-04-26 10:24:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,它返回两个列表、符号和数据,其中对应的值具有相同的索引。例如,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(),它应该在列表.dat这种风格:

dimension1;0.1
dimension2;0.03
dimension3;0.15

并将值分隔为符号和数据列表。你知道吗

所以我不知道这些列表中到底有多少个值。我想动态创建一个类,以便能够引用主程序中的值,并将该类作为def sub1(NewClass、argument1、argument2)等参数提供给子函数(列表.py)格式如下:

dimension1 = 0.1
dimension2 = 0.03
dimension3 = 0.15

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


Tags: 数据函数列表data参数def格式符号
2条回答

我怀疑你真正想要的是,重新阅读描述,使用^{}如下:

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

使用^{}可以轻松地从键列表和关联值列表创建字典,可以将其用作新类的__dict__。你知道吗

但是,不清楚为什么您希望它成为。你知道吗

可以使用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]})
    )

相关问题 更多 >