使用不同参数创建类的多个对象
我知道怎么用循环创建同一个类的多个对象,类似于这个如何用循环在Python中创建多个类对象?的内容。不过,我想做的事情有点不同,因为每个对象都需要用不同的参数来初始化。我的程序现在是从一个文件中读取所有的信息(也就是参数),然后把它们存储在一个Python字典里,像这样:
objects={'obj1':['object1','Tom',10],'obj2':['object2','John',13]}
而且需要创建的对象数量取决于文件中找到的信息……我想知道有没有办法自动创建多个类对象(也许可以用循环!),并用它们不同的参数来初始化它们……而不是像这样逐个声明:
obj1 = MyClass('object1','Tom',10)
obj2 = MyClass('object2','John',13)
.
.
.
etc
3 个回答
1
你可以做的一件事是创建一个列表,把你所有的新 MyClass
对象都放进去,像这样:
class_objects = []
for o in objects.values():
class_objects.append(MyClass(o[0], o[1], o[2]))
这样就会生成一个叫 class_objects
的列表,里面包含了你从文件中读取的所有 MyClass
对象。
2
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这种情况可能是因为我们没有正确理解某些概念或者使用了不合适的方法。
比如说,如果你在写代码的时候,发现某个变量的值和你预期的不一样,这可能是因为你在赋值的时候出错了,或者在使用这个变量之前没有正确地初始化它。
另外,有些编程语言对大小写非常敏感,也就是说“变量”和“变量”是两个不同的东西。如果你在代码中不小心把它们搞混了,就会导致错误。
总之,编程就像解谜一样,需要仔细观察和思考,才能找到问题的根源并解决它。
objects={'obj1':['object1','Tom',10],'obj2':['object2','John',13]}
class MyClass():
def __init__(self, var1, var2, var3, *args):
self.var1 = var1
self.var2 = var2
self.var3 = var3
for i in objects.keys():
my_class = MyClass(*objects[i])
print my_class.__dict__
{'var1': 'object1', 'var3': 10, 'var2': 'Tom'}
{'var1': 'object2', 'var3': 13, 'var2': 'John'}
4
>>> objects={'obj1':['object1','Tom',10],'obj2':['object2','John',13]}
>>> instances = []
>>> for name, args in objects.items():
inst = MyClass(*args)
instances.append(inst)
或者直接这样:
>>> [MyClass(*args) for name, args in objects.items()]
[<MyClass: object1, Tom, 10>, <MyClass: object2, John, 13>]
或者更简单一点,不考虑名字:
>>> [MyClass(*args) for args in objects.values()]
[<MyClass: object1, Tom, 10>, <MyClass: object2, John, 13>]
或者返回一个字典(在Python 2.7及以上版本有效)
>>> {name: MyClass(*args) for name, args in objects.items()}
{'obj1': <MyClass: object1, Tom, 10>, 'obj2': <MyClass: object2, John, 13>}
如果你在创建实例时有动态数量的参数,这个方法也能用(前提是你的类构造函数能处理这些可变数量的参数 - 使用默认值)
使用 itertools.starmap
>>> from itertools import starmap
>>> list(starmap(MyClass, objects.values())
[<MyClass: object1, Tom, 10>, <MyClass: object2, John, 13>]