为什么 Object Class 定义会有所不同

Why Object Class definition makes difference

如何确保三个 Item 的实例都是唯一的 "self-contained" 变量,而不仅仅是具有三个不同名称的相同数据?

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]

问题在行 -

item=Item

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

的新实例
item=Item()

在您原来的情况下,因为您将相同的 class 放入 item 变量,而 creating/changing 其 class 变量 - IDname ,然后将特定的 class 插入到 items 列表中。

在循环的每次迭代中,item 指向相同的 class(不是实例,而是 class),因为您没有创建 [=30 的实例=],而不是直接获取 class 本身。

既然你已经有了一个__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

为了完整起见,如上所述,您的原始代码正在创建指向 class Item 的新名称。每次调用 Item() 都会 return 一个可以分配给变量的新实例。