Python在循环中创建类实例

时间:2014-04-26 20:18:14

标签: python class loops instance

我是python的新手,所以我现在很困惑。我只想在循环中创建几个MyClass类的实例。

我的代码:

for i in range(1, 10):
  my_class = MyClass()
  print "i = %d, items = %d" % (i, my_class.getItemsCount());
  my_class.addItem(i)

Class MyClass

class MyClass:

  __items = []

  def addItem(self, item):
    self.__items.append(item)

  def getItemsCount(self):
    return self.__items.__len__();

输出是:

i = 0, items = 0
i = 1, items = 1
i = 2, items = 2
and so on...

但是我希望在每次迭代时变量my_class中都有新的MyClass空实例。所以预期的产出是:

i = 0, items = 0
i = 1, items = 0
i = 2, items = 0
你可以帮助我理解吗? 感谢。

1 个答案:

答案 0 :(得分:7)

_items是一个类属性,在类定义期间初始化,因此通过向其添加值,您可以修改属性,不是实例属性。

要解决此问题,您可以通过将此代码放入_items方法为该类的每个实例创建__init__

class MyClass:
    def __init__(self):
        self._items = []

然后_items列表对象在所有类实例中都会有所不同

>>> first = MyClass()
>>> first._items.append(1)
>>> second = MyClass()
>>> second._items.append(1)
>>> first._items is second._items
False

因此追加将按预期工作。

顺便说一句,在您的情况下__items is not quite good name choice for a class variable