单例模式就是 单例类只能实例化一个对象
主要有两种构建方式:
懒汉模式:指全局的单例实例在第一次使用时构建
饿汉模式:指全局的单例实例在类转载时构建
# !/usr/bin/python3
# -*- coding:utf-8 -*-
# @author:TalentC
# @Time:2018/10/19
def singleton(cls, *args, **kw):
instances = {}
def _singleton():
if cls not in instances:
instances[cls] = cls(*args, **kw)
return instances[cls]
return _singleton
@singleton
class Test_singleton(object):
a = 3
class Test(object):
a = 3
if __name__ == '__main__':
# 测试单例模式
t1 = Test_singleton()
t2 = Test_singleton()
t1.a = 5
print(t2.a)
# t1 和 t2 的哈希值
print(hash(t1))
print(hash(t2))
print('------------------')
# 测试非单例模式
t3 = Test()
t4 = Test()
t3.a = 5
print(t4.a)
# t3 和 t4 的哈希值
print(hash(t3))
print(hash(t4))
结果:
单例类创建的实例t1、t2的哈希值是一样的