python中单例模式,,一、单例模式设计基础
python中单例模式,,一、单例模式设计基础
一、单例模式设计基础概念:
单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。
目的:让类创建对象,在系统中只有唯一的一个实例子
每一次执行类名()返回的对象、内存地址是相同的
二、__new__方法:
使用类名()创建对象,Python解释器首先会调用__new__()方法为对象分配空间__new__()是一个由objec基类提供的内置的静态方法,主要作用有两个:在内存中为对象分配空间
返回对象的引用Python的解释器获得对象的引用后,将引用作为第一个参数,传递给__init__()方法
重写__new__方法的代码是非常固定的而且是非常重要的!重写__new__()方法一定要return super().__new__(cls)否则Python解释器得不到分配了空间的对象引用,就不会调用对象的初始化方法(备注:__new__()是一个静态方法,在调用时需要主动传递cls参数)
代码:
1 class Phone(object): 2 def __new__(cls, *args, **kwargs): 3 # 1、创建对象时,new方法会被自动化调用 4 print("创建对象,分配空间") 5 # 2、为对象分配空间 6 instance = super().__new__(cls) 7 # 3、返回对象的引用 8 return instance 9 def __init__(self):10 print("手机初始化...")11 12 # 实例化phone13 phone = Phone()14 print(phone)
三、Python中的单例
单例:让类创建的对象,在系统中只有唯一的一个实例:定义一个类属性,初始值是None,用于记录单例对象的引用
重写__new__()方法如果类属性 is None,调用父类方法分配空间,并在类属性中记录结果返回类属性中记录的对象引用视图模型
代码:
1 class SingletonTest(object): 2 # 记录一个被创建对象的引用(此处加个类属性,主要是为了保障类返回地址的唯一性) 3 instance = None 4 5 # 记录是否执行过初始化方法(未做标记处理的话,在初始化过程中会被执行多次) 6 init_flag = False 7 def __new__(cls, *args, **kwargs): 8 # 1、判断类属性是否是空对象 9 if cls.instance is None:10 # 2、调用父类的方法,为第一个对象分配对象11 cls.instance = super().__new__(cls)12 # 3、返回类属性保存的对象引用13 return cls.instance14 15 def __init__(self):16 # 1、判断是否执行过初始化动作17 if SingletonTest.init_flag:18 return19 # 2、如果没有执行过,在执行初始化动作20 print("初始化对象。。。")21 # 3、修改类属性标记22 SingletonTest.init_flag = True23 #print("初始化对象。。。")24 25 singleton1 = SingletonTest()26 print(singleton1)27 singleton2 = SingletonTest()28 print(singleton2)
python中单例模式
相关内容
- python单元测试框架Unitest,,一.unitest简
- Python 实现类似range函数,,需求:写一个属于你自
- python机器学习基础教程-鸢尾花分类,,一: 环境准备:
- python-CuPy--加速Numpy,,python-CuP
- 流畅python学习笔记第十八章:使用asyncio包处理并发(一
- Python 对坐标轴的设置,,01、加载库impo
- python3之对本地TXT文件进行增加,删除,修改,查看功能
- TOPk实现(python),python有什么用,import hea
- Python Google Translate API,,参考自:http:/
- Python Faker随机生成测试数据(干货),,前言 Faker是
评论关闭