zoukankan      html  css  js  c++  java
  • Python 装饰器实现单列模式

    # 使用装饰器实现单列模式
    def singleton(cls):
    
        # 用来存在实例的字典
        singleton_instance = {}
    
        def wrapper(*args, **kwargs):
            # 判断字典中是否实例
            if not singleton_instance.get(cls.__name__): 
                # 没有则创建一个实例,并存入字典中
                singleton_instance[cls.__name__] = cls(*args, **kwargs)
            # 返回已经创建的实例
            return singleton_instance[cls.__name__]
        return wrapper
    
    
    @singleton
    class A(object):
        def __init__(self):
            print("__init__")
    
        def test(self):
            print("test")
    
    
    print(A) 
    print(id(A()))
    print(id(A()))
    A().test()
    
    输出
    <function singleton.<locals>.wrapper at 0x000002203FE44D08>
    __init__
    2337533963008
    2337533963008
    test

    总结:

    1、定义一个装饰器,在装饰器内部返回一个该类的对象皆可(如果已经有了,则返回之前创建的,所有需要一个字典来存储)

    2、类被装饰器装饰以后,其类型已经被更改为 function 类型了

    说明:cls.__name__ 可以任意命名,保持一致即可

  • 相关阅读:
    1、jquery_属性和选择器
    sqlserver2012——SqlCommand创建对象的三种方法
    数据库视频
    插件源码
    打包部署
    SpringCloud-Demo
    SpringCloud
    分布式管理
    security-oauth2
    ES的使用
  • 原文地址:https://www.cnblogs.com/yaoqingzhuan/p/10686803.html
Copyright © 2011-2022 走看看