在Python中,为列表中的每个字符串创建一个类。
在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)
问题出现的原因:
在上述代码中,我们创建了一个名为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字典,以显示每个字符串对应的类的实例。
通过使用类的元编程功能,我们可以动态创建每个字符串对应的独立类的实例,从而解决了问题。