早上大部分时间都花在这个上面,不得不承认我被困住了。
我有一个任务,其核心问题是创建许多对象,每个对象都有一个应该可以从函数调用的标识符。 - 按概念,这应该类似于SQL语句
“从所有对象中选择 id ,其中 id>某个整数;”。
下面的主函数包含生成id的循环。接下来应创建对象,其中id从范围变量“i”获得。我已经看过使用super,但看不到连接点的线条。你有什么好建议吗?
class aContainer(self, n):
def __init__(self, n):
self.id = n
#self.contains=[]
class create_object(n):
# Completely blank
def main()
for i in range(10):
create_object(i) # i is the id-tag of the object.
# next: print list of object.id's
main()
答案 0 :(得分:0)
不确定您为什么要这样做,但是......
您可以调整以下内容(不是使用dict
而不是list
)...:
from itertools import count
next_id = count(0)
id_to_object = {}
class blah(object):
pass
for i in xrange(10):
id_to_object[next(next_id)] = blah()
for i in xrange(25):
id_to_object[next(next_id)] = blah()
for k, v in id_to_object.iteritems():
if k > 5:
print v
或者使用列表...,每次创建新对象...
your_list.append(blah())
然后你可以your_list[5:15]
来获得一组对象。
答案 1 :(得分:0)
“Deborah”在另一个论坛中解决了以下问题:
如果ID是唯一的, 存储从id到实际对象的映射作为字典给你一个 快速(基本上是O(1))查找。您可以将其存储在外部(如 在上面的代码中)或在类中作为其接口的一部分:
>>> class Foo:
instances = {}
def __init__(self, id):
self.id = id
Foo.instances[id] = self # or self.instances[id], if you prefer
>>> for i in range(6): # Notice range expression used here!
Foo(i)
<__main__.Foo object at 0x980a40c>
<__main__.Foo object at 0x981c16c>
<__main__.Foo object at 0x980ed6c>
<__main__.Foo object at 0x980eeac>
<__main__.Foo object at 0x9819f4c>
<__main__.Foo object at 0x9819b0c>
>>> Foo.instances
{0: <__main__.Foo object at 0x980a40c>, 1: <__main__.Foo object at 0x981c16c>, 2: <__main__.Foo object at 0x980ed6c>, 3: <__main__.Foo object at 0x980eeac>, 4: <__main__.Foo object at 0x9819f4c>, 5: <__main__.Foo object at 0x9819b0c>}
(并且记住不要直接调用Foo(id),除非你知道ID是新的!)
(您也可以将此作为静态方法,但我已经过时了 宣布那些......但它会更整洁)
最后,如果您不关心实际ID值是什么,那么您可以使用 id(self),保证唯一,而不必传入ID 第一名。