【Python】用元类实现单例模式
单例模式
在类中增加一个标识符,存储当前实例。如果为空就创建,如果已经被创建了就不重新创建,直接返回实例化。
如果同时创建了两个,那么两个对象都是一样的(包括数据和内存地址)。保证一个类仅有一个实例,并提供与一个访问它的全局访问点,避免一个全局使用的类频繁的创建与销毁。
class MyType(type):
def __init__(self, name: str, bases: tuple, attrs: dict) -> None:
"""__init__参数解释
Args:
name (str): 类名
bases (tuple): 继承哪些类
attr (dict): 类中有哪些成员
"""
super().__init__(name, bases, attrs)
self._inistance = None
def __call__(self, *args, **kwargs):
# 判断是否已有对象
if not self._inistance:
self._inistance = self.__new__(self)
self.__init__(self._inistance, *args, **kwargs)
return self._inistance
# 简写单例模式
class Singleton(object, metaclass=MyType): pass
class Foo(Singleton): pass
v1 = Foo()
v2 = Foo()
此时的v1和v2的内存地址都是一样的,self._inistance不为空,代表已经有相同的实例创建过,所以直接返回已经创建好的实例。
v1: <__main__.Foo object at 0x01CD9D70>
v2: <__main__.Foo object at 0x01CD9D70>

浙公网安备 33010602011771号