为什么对象类定义有所不同

时间:2015-08-22 05:22:19

标签: python class oop object instance

如何确保三个Item的实例都是唯一的“自包含”变量,而不仅仅是具有三个不同名称的相同数据?

class Item(object):
    def __init__(self):
        self.ID=None
        self.name=None

items=[]
for row in range(3):
    item=Item
    item.ID=row
    item.name='Item %s'%row
    items.append(item)

for item in items:
    print item.name

print 'True?:', items[0]==items[1]==items[2]

2 个答案:

答案 0 :(得分:3)

问题在于 -

item=Item

这将类设置为item,它不会创建该类的新实例。您需要将Item称为Item(),以创建该类的新实例 -

item=Item()

在原始情况下,因为您将同一个类放到item变量,并创建/更改其类变量 - IDname,然后将该特定类插入items列表。

在循环的每次迭代中,item指向同一个类(不是实例,而是类),因为您没有创建类的实例,而是直接获取类本身。

答案 1 :(得分:2)

由于您已经拥有__init__方法,因此您也可以利用其功能。

class Item(object):
    def __init__(self, id=None, name=None):
        self.id = id
        self.name = name

items = []

for row in range(3):
    item = Item(id=row, name='Item {}'.format(row))
    items.append(item)

for item in items:
    print item.name

为了完整性,如上所述,您的原始代码正在创建指向类Item的新名称。每次可以将变量分配给变量时,调用Item()将返回一个新实例。