2

我正在构建自己的轻量级表单。我想将实例化的对象保存在类变量(可能是字典)中。当我请求像 get(id) 这样的对象(通过类方法)时,我想从实例化列表中返回该对象,或者如果它不存在则创建一个。

有没有办法防止对象的实例化(如果它的 id 已经存在于 cls 列表中)?

4

2 回答 2

1

只需执行显式检查,这是最干净的方法,我相信:

class OrmContainer(object):
    objects = {}

    @classmethod
    def get(cls, id):
        if id not in cls.objects:
            cls.objects[id] = SomeOtherClass(id)
        return cls.objects[id]
于 2012-05-22T16:37:56.487 回答
1

有两种直接的方法 - 以及许多其他方法。正如您所建议的,其中之一是__new__为您的对象编写方法,该方法可以返回一个已经存在的对象或创建一个新实例。

另一种方法是为您的对象使用工厂函数 - 并调用这个工厂函数而不是类 - 或多或少像这样:

class _MyClass(object):
    pass

def MyClass(*args, **kw):
    if not "my_class_object" in all_objects:
         all_objects["my_class_object"] = _MyClass(*args, **kw)
    return all_objects["my_class_object"]
于 2012-05-22T16:40:45.147 回答