シングルトンについて調べてみる。
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 件のコメント:
コメントを投稿