将多个变量一次初始化为同一个对象但不同的实例

时间:2013-04-14 12:58:06

标签: python initialization

以同样的方式初始化多个对象的最简洁方法是什么,而不是让它们都指向同一个对象?我想这样做:

a, b, c = create_object(), create_object(), create_object()

以不那么冗长的方式。

我可以执行以下操作,但随后所有变量都指向同一个对象

a = b = c = create_object() # then a.change() changes them all!

是否有一种干净,pythonic的方式来做到这一点,我错过了?

2 个答案:

答案 0 :(得分:1)

pythonic 代码是使感觉最的代码。这样做要好多了

a = create_object()
b = create_object()
c = create_object()
与替代方案相反,混乱的乱码。不要害怕有两条额外的线;真的,好处要大得多。 : - )

答案 1 :(得分:1)

使用工厂。

def factory(num):
    for i in range(num):
        yield shell()

class shell():
    pass

a, b, c = factory(3)

# results:
>>> a
<__main__.shell instance at 0x0000000002BE0548>
>>> b
<__main__.shell instance at 0x0000000002BE03C8>
>>> c
<__main__.shell instance at 0x0000000002BE0588>

当然,您可以添加额外的参数以便能够将一组变量初始化为相同的,或者您甚至可以使用复杂的工厂来确定自己的参数以传递给类构造函数。

您也可以使用该类的静态方法。

无论您的偏好是什么,如果您想将一组变量初始化为同一类的所有差异实例,那么您应该这样做。 (虽然,一般来说,这种活动不是非常 pythonic ,因为它的价值......)


要使用您展示的内容制作工厂,并使其更加强大,这是一个很好的示例:

def factory(obj, num, args=None):
    for i in range(num):
        yield obj(args) if args else obj()


a, b, c = factory(create_object, 3)