2

私は自分の軽量なormを構築しています。インスタンス化されたオブジェクトをクラス変数(おそらく辞書)に保持したいと思います。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

それには 2 つの簡単な方法があり、他にも多くの方法があります。あなたが示唆するように、それらの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 に答える