python在循环中创建类实例

Python creating class instances in a loop

本问题已经有最佳答案,请猛点这里访问。

我刚接触过python,所以我现在很困惑。我只想在一个循环中创建几个类MyClass的实例。

我的代码:

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

类Myclass

1
2
3
4
5
6
7
8
9
class MyClass:

  __items = []

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

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

输出为:

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

但我期望每次迭代时变量my_类中出现my class的新空实例。因此,预期产量为:

1
2
3
i = 0, items = 0
i = 1, items = 0
i = 2, items = 0

你能帮我理解吗?谢谢。


_items是一个类属性,在类定义过程中初始化,因此通过向它附加值,可以修改类属性而不是实例属性。

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

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

那么,_items列表对象在所有类实例中都是不同的。

1
2
3
4
5
6
>>> first = MyClass()
>>> first._items.append(1)
>>> second = MyClass()
>>> second._items.append(1)
>>> first._items is second._items
False

因此,附加将按预期工作。

顺便说一句,对于类变量来说,__items不是很好的名称选择。