在Python构造函数中创建对象列表

时间:2014-03-15 01:45:19

标签: python constructor

我想将一个变量传递给一个对象的构造函数,并根据该值获取一个或多个对象。类似的东西:

class MyClass():

    def __init__(self,n_objects):

        #Should return n_objects of MyClass

虽然因为我需要返回一个列表(我认为)但是self是类型为“MyClass”的东西,所以它似乎不太合适。我错过了什么?

1 个答案:

答案 0 :(得分:2)

构造函数只返回您要创建的内容的单个引用,因此您无法以这种方式执行此操作。你需要的是将这个列表放在外面:

result = [MyClass() for i in xrange(n_objects)]

然后围绕它创建一个包装函数。

请注意xrange适用于python 2,它在python 3中已重命名为range

如果你必须坚持保持"封装"在类中,您可以定义一个类方法。天真的例子:

>>> class Foo(object):
...     def __init__(self):
...         self.bar = 1
...     @classmethod
...     def Copies(cls, n):
...         return [cls() for i in xrange(n)]
... 
>>> Foo()
<__main__.Foo object at 0x7f2059ac1910>
>>> Foo.Copies(3)
[<__main__.Foo object at 0x7f2059ac19d0>, <__main__.Foo object at 0x7f2059ac1990>, <__main__.Foo object at 0x7f2059ac1a10>]