设计模式_单例模式的懒汉式实例化

时间:2020-05-09
本文章向大家介绍设计模式_单例模式的懒汉式实例化,主要包括设计模式_单例模式的懒汉式实例化使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
单例模式的懒汉式

在导入模块的时候,可能会无意中创建一个对象,但当时根本用不到

懒汉式实例化能够确保在实际需要时才创建对象

懒汉式实例化是一种节约资源并仅在需要时才创建它们的方式

 

class Singleton:
    _instance = None

    def __init__(self):
        if not Singleton._instance:
            print("__init__的方法使用了,在静态 getinstance 方法才创建了实例对象")
        else:
            # 在静态 getinstance 方法,改变了 _instance 的值
            print("实例已创建",self.getinstance())

    @classmethod
    def getinstance(cls):
        '''
        在 getinstance 内写创建实例的语句
            如果在 __init__ 内写明创建语句
                如果那个对象创建之后没有立即使用,会造成资源浪费
        '''
        if not cls._instance:
            cls._instance = Singleton()
            '''
            创建实例化对象时,还会再调用一次 __init__方法
                cls._instance = Singleton() 修改了 _instance 属性的状态
            '''
        return cls._instance


s = Singleton()
# __init__的方法使用了,在静态 getinstance 方法才创建了实例对象
print('已创建对象',Singleton.getinstance())
'''
此时才是真正的创建了对象
运行结果:
__init__的方法使用了,在静态 getinstance 方法才创建了实例对象
已创建对象 <__main__.Singleton object at 0x00000206AA2436D0>
'''
print(id(s))
# 2227647559520

s1 = Singleton()
# 实例已创建 <__main__.Singleton object at 0x00000206AA2436D0>
print('已创建对象',Singleton.getinstance())
# 已创建对象 <__main__.Singleton object at 0x00000206AA2436D0>
print(id(s1))
# 2227647561248

创建一个静态变量 _instance = None

在 __init__ 方法内部,不进行创建对象的操作

在类方法 getinstance 方法中,进行类的创建
注:
此时会调用一次 __init__ 方法

创建对象时
s = Singleton()  还会调用一次 __init__ 方法

2020-05-09

原文地址:https://www.cnblogs.com/hany-postq473111315/p/12856586.html