Python 在实例化期间,如何从范围函数变量将“id”解析为类对象?
我花了一上午的大部分时间在这件事上,不得不承认我被卡住了 我有一个任务,其中的核心问题是创建许多对象,每个对象都有一个标识符,该标识符应该可以从函数调用。-从概念上讲,这应该类似于SQL语句 从id>some integer;的所有对象中选择id 下面的主函数包含生成id的循环。接下来,应该使用从范围变量i获得的id创建对象。我已经看了使用,但看不到连接点的线条。你有什么好的建议吗Python 在实例化期间,如何从范围函数变量将“id”解析为类对象?,python,python-3.x,super,Python,Python 3.x,Super,我花了一上午的大部分时间在这件事上,不得不承认我被卡住了 我有一个任务,其中的核心问题是创建许多对象,每个对象都有一个标识符,该标识符应该可以从函数调用。-从概念上讲,这应该类似于SQL语句 从id>some integer;的所有对象中选择id 下面的主函数包含生成id的循环。接下来,应该使用从范围变量i获得的id创建对象。我已经看了使用,但看不到连接点的线条。你有什么好的建议吗 class aContainer(self, n): def __init__(self, n):
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()
不知道你为什么要这么做,但是
您可以修改如下内容,而不是使用dict而不是list…:
或者使用列表…,每次创建新对象时
your_list.append(blah())
然后你可以做你的列表[5:15]来获得一组对象。Deborah在另一个论坛中解决了这个问题,如下所示: 如果ID是唯一的, 将从id到实际对象的映射存储为字典可以提供 快速的O1查找。您可以在外部将其存储为 在上述代码中或类内作为其接口的一部分:
>>> 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>}
记住不要直接调用Fooid,除非你知道这个ID是新的
您也可以作为静态方法来执行此操作,但我对如何执行此操作已经过时了
申报那些。。。不过会更整洁
最后,如果您不关心实际的ID值是什么,那么您可以使用
idself,它保证是唯一的,并且不必在
第一位。Jon,我对列表和字典很满意,但这里不需要这样。上述代码更广泛的方面要求递归使用列表不允许的类。所以,尽管你提出的想法很可爱,但它并不能解决问题,或者我没有抓住重点…?。好吧,TBH-我有点困惑,为什么你不能把物体传递给它们自己。。。而且,现在你才提到递归,不可否认,OP中有一些微妙的暗示,但也许有必要澄清一下,这样其他人就不会像我想的那样思考,我将把这个留在这里,让大家知道
>>> 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>}