• python 单例模式4中实现方法


    python实现单例模式的方法:

    1. 使用模块

    python的模块在第一次导入时会生成.pyc文件,当第二次导入时就会直接加载.pyc文件,而不会再次执行模块代码。

    只需将其单独放在一个模块里,并创建一个实例,外部使用时直接调用该实例即可。

    2. 使用__new__方法

     1 class Singleton:
     2     _instance = None
     3     def __new__(cls, *args, **kwargs):
     4         if cls._instance is not None:
     5             cls._instance = super().__new__(*args, **kwargs)
     6         return cls._instance
     7 
     8 
     9 class Myclass(Singleton):
    10     a = 1
    11 
    12 class1 = Myclass()
    13 class2 = Myclass()
    14 print(class1 is class2)

    输出结果:

    True

    3. 使用装饰器

     1 from functools import wraps
     2 
     3 
     4 def singleton(cls):
     5     instances = {}
     6     @wraps(cls)
     7     def getinstance(*args, **kwargs):
     8         if cls not in instances:
     9             instances[cls] = cls(*args, **kwargs)
    10         return instances[cls]
    11     return getinstance
    12 
    13 @singleton
    14 class Myclass():
    15     a = 1
    16 
    17 class1 = Myclass()
    18 class2 = Myclass()
    19 print(class1 is class2)

    输出结果:

    True

    4. 使用元类metaclass

     1 class Singleton(type):
     2     instances = {}
     3     def __call__(cls, *args, **kwargs):
     4         if cls not in cls.instances:
     5             cls.instances[cls] = super().__call__(*args, **kwargs)
     6         return cls.instances[cls]
     7 
     8 
     9 class Myclass(metaclass=Singleton):
    10     a = 1
    11 
    12 class1 = Myclass()
    13 class2 = Myclass()
    14 print(class1 is class2)

    输出结果:

    True
  • 相关阅读:
    雅礼集训 Day6 T2 Equation 解题报告
    雅礼集训 Day6 T1 Merchant 解题报告
    雅礼集训 Day5 T3 题 解题报告
    雅礼集训 Day3 T2 u 解题报告
    雅礼集训 Day3 T2 v 解题报告
    set-begin
    set-constructors
    set-constructors
    list-unique
    list-unique
  • 原文地址:https://www.cnblogs.com/guolei2570/p/9041069.html
Copyright © 2020-2023  润新知