四时宝库

程序员的知识宝库

python如何优雅写一个单例类(Sington)

Python中的单例模式可以通过元类来实现。元类可以定制类的创建过程,从而实现单例模式。下面给出一个例子:

class SingletonMeta(type):
    _instances = {}
    
    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]
    
class Singleton(metaclass=SingletonMeta):
    pass

说明:

- `SingletonMeta` 是一个元类,它继承自 `type`。

- `_instances` 是一个类变量,存储所有单例类的实例。

- `__call__` 方法会在类被调用时自动执行。如果类的实例不存在,则调用 `super().__call__` 创建实例并存储实例到 `_instances` 中。否则直接返回已有的实例即可。

- `Singleton` 是一个简单的单例类,它通过 `metaclass=SingletonMeta` 指定元类,从而实现单例模式。

使用示例:

s1 = Singleton()
s2 = Singleton()
print(s1 is s2)  # True

简单来说,通过元类控制实例创建和维护,就可以实现单例模式。因为元类只会在类被定义时执行一次,所以可以确保单例类只存在一个实例。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接