如何确保三个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]
答案 0 :(得分:3)
问题在于 -
item=Item
这将类设置为item
,它不会创建该类的新实例。您需要将Item
称为Item()
,以创建该类的新实例 -
item=Item()
在原始情况下,因为您将同一个类放到item
变量,并创建/更改其类变量 - ID
和name
,然后将该特定类插入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()
将返回一个新实例。