Python 设计模式 -- 单例模式
来源:互联网 发布:上海市网络作家协会 编辑:程序博客网 时间:2024/06/01 12:18
Python 单例模式
单例模式的意思是在同一个运行环境中一个进程里面,这个类的实例只有一份,该实例也只会初始化一次。
python 语言的单例模式至少可以有4种实现方式:
1.使用__new__
构造函数:
class Singleton(object): __instance = None def __new__(cls, *argv, **kwags): if Singleton.__instance is None: Singleton.__instance = object.__new__(cls, *argv, **kwags) return Singleton.__instanceclass MyFoo(Singleton): passf1 = MyFoo()f2 = MyFoo()print f1print f2>><__main__.MyFoo object at 0x7fd9f2a96110><__main__.MyFoo object at 0x7fd9f2a96110>
2.使用python装饰器实现:
def singleton(cls): __instance = {} def _singleton(*argv, **kwags): if cls not in __instance: __instance[cls] = cls(*argc, **kwags) return __instance[cls] return _singleton@singletonclass MyFoo(object): def __init__(self, age): self.age = agef1 = MyFoo(12)f2 = MyFoo(13)print f1print f2print f1.ageprint f2.age>><__main__.MyFoo object at 0x7fab563f4150><__main__.MyFoo object at 0x7fab563f4150>1212
3.使用import的方式:
#mySingleClass.pyclass MySingleClass(object): def __init__(self): passsingle_instance = MySingleClass()#test.pydef func1(): from mySingleClass import single_instance print(single_instance)def func2(): from mySingleClass import single_instance print(single_instance)func1()func2()>><mySingleClass.MySingleClass object at 0x7f13fa14e210><mySingleClass.MySingleClass object at 0x7f13fa14e210>
4.共享属性:
创建实例时把所有实例的
__dict__
指向同一个字典,这样它们具有相同的属性和方法.
这种方式和前面3种方式并不能相提并论,我觉得它根本没有实现正真意义上的单例,因为它实例化的时候创建的是id不同的实例,虽然指向了相同的__dict__
。不推荐这种方式,有误导性。
class Singleton(object): __global_dict = {} def __new__(cls, *args, **kwags): __instance = object.__new__(cls, *args, **kwags) __instance.__dict__ = Singleton.__global_dict return __instanceclass MyFoo(Singleton): def __init__(self, name): self.name = namef1 = MyFoo("Python")f2 = MyFoo("Java")print(f1)print(f2)print f1.nameprint f2.name>><__main__.MyFoo object at 0x7fdc1315c350><__main__.MyFoo object at 0x7fdc1315c390>JavaJava
阅读全文
0 0
- python 设计模式之 单例模式
- python设计模式之单例模式
- 设计模式-单例模式-Borg-python
- 设计模式--单例模式python实现
- Python设计模式-单例模式
- Python 设计模式 -- 单例模式
- Python与设计模式--单例模式
- python设计模式(原型模式、单例模式)
- python设计模式之单例设计模式
- 5、python设计模式之单例
- python单例设计模式简述
- 设计模式九(单例模式,python语言实现)
- 设计模式之单例模式(python实现)
- 23种设计模式之python实现--单例模式
- Python设计模式——单例模式
- Python案例-开发之路-设计模式-单例模式
- Python设计模式之单例模式实例
- Python设计模式(一)--单例模式
- C++ 读入空格
- js通过使用Set对象,将多个数组合并且去重排序(ECMAscript 6)
- JAVAWEB开发之Hibernate详解(四)——持久化类的继承映射关系
- LUOGU1445——没占到1444的愤怒 数学
- Java设计模式-单例模式
- Python 设计模式 -- 单例模式
- 初识servlet
- 测试ipv6网络连通性的UDP协议测试代码
- ORA-01552 :非系统表空间 'xxxx'不能使用系统回退段
- 【菜鸟看框架】——Linq实现动态模糊查询
- MyEclipse使用Maven创建web项目+搭建SSM框架
- 实现弹出对话框选择武将
- 001初入C/C++之HelloWorld
- 【PAT甲级】1068. Find More Coins (30)