为什么 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 变量 - ID
和 name
,然后将特定的 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 一个可以分配给变量的新实例。
如何确保三个 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 变量 - ID
和 name
,然后将特定的 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 一个可以分配给变量的新实例。