シングルトンについて調べてみる。
hasatttrは遅そうなので、try~exceptで例外をキャッチする方法にしたところ、10%高速になった。
class Singleton(object): def __new__(cls, *args, **kwds): try: return cls.__instance except AttributeError: instance = super(Singleton, cls).__new__(cls, *args, **kwds) cls.__instance = instance return instance
そのままだと、__init__(self, *vals, **kwds)が、毎回呼ばれてしまうので、
__init__を上書きする処理を追記。
さらに、__slots__ = ()を入れて、1%高速化。
class Singleton(object): __slots__ = () @staticmethod def _nodo(self,*args, **kwds): pass def __new__(cls, *args, **kwds): try: return cls.__instance except AttributeError: instance = super(Singleton, cls).__new__(cls, *args, **kwds) cls.__instance = instance cls.__init__(instance, *args, **kwds) cls.__init__ = Singleton._nodo return instance
0 件のコメント:
コメントを投稿