使用 Python 3.3,我想将一个类绑定Test
到另一个名为的类,TestManager
以便管理器创建实例Test
并存储它们,以便之后访问它们。
简而言之(我的意思是,Python shell ...),我希望能够做到这一点(假设name
是 的属性Test
):
> t = Test.objects.get(id=3)
> t.name
# Returns 'Name 3'
诀窍是我的对象集合是一个“静态”集合,从某种意义上说,它是首先创建的(不是由任何用户创建的),然后从未修改或删除,也没有删除或编辑它的记录。它是固定的。所以这是我尝试的代码:
class TestManager:
def __init__(self, *args, **kwargs):
self._tests = [Test(name='Name {}'.format(i)) for i in range(100)]
def get(self, id):
return self._tests[id]
class Test:
objects = TestManager()
def __init__(self, name=''):
self.name = name
正如预期的那样,NameError: global name 'Test' is not defined
由于循环初始化。理想情况下,我应该create()
在管理器中有一个方法来负责在列表中添加元素(而不是__init__()
),但这意味着创建不是在管理器中完成,而是在其他地方完成。
到目前为止,我想出的“最佳”解决方案是首先在get()
方法中检查列表是否为空,然后调用一个fill_the_damn_list()
方法,但对我来说这似乎很hackish。另一种方法是使用字典而不是列表,并首先动态创建实例get()
。后一个的优点是它不会创建无用/从未创建过get()
的实例,但总共只有一百个,我不确定它是否真的重要,而且这个解决方案的 hackish-ness 看起来与我...
由于我对 Python 很陌生(如果还不够清楚......),我想知道是否有更好的方法来做到这一点并保持简单。如果需要,我也可以重构,但我还没有找到更好的解决方案......