我是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
你可以帮助我理解吗?
感谢。
答案 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。