在Python中,为列表中的每个字符串创建一个类。

25 浏览
0 Comments

在Python中,为列表中的每个字符串创建一个类。

假设我有一个字符串列表:

people = ['Mike','Paul','Caroline']

还有一个类:

class Person:
    def __init__(self, name, is_married = False):
        self.name = name
        self.is_married =is_married

如何遍历列表中的字符串,并为每个字符串创建一个Person实例?

理想情况下,我希望能够通过他们的名字(字符串)来调用每个实例,例如:

Mike.is_married = True
print(Mike.is_married)

0
0 Comments

问题出现的原因:

在上述代码中,我们创建了一个名为obj的空字典,并使用循环迭代一个名为people的列表。在每次迭代中,我们将列表中的元素作为键,将其对应的值初始化为一个名为Person的对象,并将其添加到obj字典中。

解决方法:

在上述代码中,我们使用了一个字典来存储每个人的对象。然而,如果我们希望为每个字符串在列表中创建一个独立的类,我们可以使用类的元编程功能来动态创建类。

下面是解决该问题的代码示例:

def create_class(name):
    return type(name, (object,), {})
obj = {}
for pers in people:
    cls = create_class(pers)
    obj[pers] = cls()
print(obj)

在上述代码中,我们定义了一个名为create_class的函数,该函数接受一个字符串作为参数,并使用type函数动态创建一个新的类。我们使用空元组作为基类,并传递一个空字典作为类的属性和方法。

然后,我们使用循环迭代列表中的每个字符串,并调用create_class函数来创建一个新的类。我们将类的实例存储在obj字典中,其中键是字符串本身。

最后,我们打印出obj字典,以显示每个字符串对应的类的实例。

通过使用类的元编程功能,我们可以动态创建每个字符串对应的独立类的实例,从而解决了问题。

0