python面接問題-2018.1.30
2295 ワード
質問:単一のモデルをどのように実現しますか?
class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
バリエーション:
class Singleton(object):
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
from functools import wraps
def singleton(cls):
instances = {}
@wraps(cls)
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
class Singleton(type):
def __call__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instance
class Foo(object):
__metaclass__ = Singleton
class Singleton(object):
_state = {}
def __new__(cls, *args, **kwargs):
orig = super(Singleton, cls).__new__(cls, *args, **kwargs)
orig.__dict__ = cls._state
return orig
# singleton.py
class Singleton(object):
def foo(self):
pass
my_singleton = Singleton()
バリエーション:
# singleton.py
import sys
class Singleton(object):
pass
sys.modules[__name__] = Singleton()