假设我有父类 - “父”,我想创建三个对象 - o1,o2,o3。
因此,如果有一个简短的手或一个美丽的方式来做以下事情:
sysctlbyname("hw.machine", machineNameAsCString, &size, NULL, 0);
答案 0 :(得分:2)
它是否更美丽是一个意见问题,但你可以在一行中做到这一点,如下:
o1, o2, o3 = Parent(), Parent(), Parent()
但请注意,以下操作不,因为它为每个变量分配了相同的对象:
o1 = o2 = o3 = Parent() # does NOT work!
您还可以使用列表推导或生成器表达式来创建三个实例,并使用列表解包将它们分配给不同的变量:
o1, o2, o3 = (Parent() for _ in range(3))
这可能看起来有点复杂,但如果Parent
的初始化更复杂,可能是最佳解决方案,例如:如果你也传递一些参数。
您可能想要使用列表乘法,但是再次,这不起作用,因为列表将保存对同一对象的三个引用。
o1, o2, o3 = [Parent()] * 3 # does NOT work, too!
答案 1 :(得分:2)
这完全取决于你的要求。如果您只想创建三个Parent
对象,则可以生成元组:
objs = tuple(Parent() for _ in xrange(3))
并以objs[0]
,objs[1]
和objs[2]
的形式访问对象。
如果您确实希望将它们命名为o1
,o2
和o3
,那么您可以解压缩元组:
o1, o2, o3 = (Parent() for _ in xrange(3))
请注意,这大致相当于以下内容:
o1, o2, o3 = Parent(), Parent(), Parent()
第二种和第三种方法的缺点是必须确保LHS和RHS上元组中的元素数匹配。