python学习教程(十三)python实现单例模式
来源:互联网 发布:大学刷题软件 编辑:程序博客网 时间:2024/06/02 03:09
首先,要知道什么是python的单例模式,所谓单例模式就是一个类只能创建一个实例化。
然后,就是python单例模式的方法,总共可以分为两大种,四小种,一会就回说的。
首先,方法一:
class Singleton(type): def __init__(cls, name, bases, dict):super(Singleton, cls).__init__(name, bases, dict)cls.instance = None def __call__(cls, *args, **kw):if cls.instance is None: cls.instance = super(Singleton, cls).__call__(*args, **kw) return cls.instanceclass MyClass(object): __metaclass__ = Singletonprint MyClass()print MyClass()
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 MyClass(object): a = 1 def __init__(self, x=0): self.x = x one = MyClass() two = MyClass() two.a = 3 print one.a #3 print id(one) #29660784 print id(two) #29660784 print one == two #True print one is two #True one.x = 1 print one.x #1 print two.x
方法三:使用__metaclass__元类来实现
class Singleton2(type): def __init__(cls, name, bases, dict): super(Singleton2, cls).__init__(name, bases, dict) cls._instance = None def __call__(cls, *args, **kw): if cls._instance is None: cls._instance = super(Singleton2, cls).__call__(*args, **kw) return cls._instance class MyClass(object): __metaclass__ = Singleton2 one = MyClass() two = MyClass() two.a = 3 print one.a #3 print id(one) #31495472 print id(two) #31495472 print one == two #True print one is two #True
方法四:通过共享属性来实现,所谓共享属性,最简单直观的方法就是通过__dict__属性指向同一个字典dict
class Borg(object): _state = {} def __new__(cls, *args, **kw): ob = super(Borg, cls).__new__(cls, *args, **kw) ob.__dict__ = cls._state return ob class MyClass(Borg): a = 1 one = MyClass() two = MyClass() #one和two是两个不同的对象,id, ==, is对比结果可看出 two.a = 3 print one.a #3 print id(one) #28873680 print id(two) #28873712 print one == two #False print one is two #False #但是one和two具有相同的(同一个__dict__属性),见: print id(one.__dict__) #30104000 print id(two.__dict__)
其实吧,从本质上来讲,方法一二三都属于一种单例化模式的方法,与第四种不同,所以认为python中有两种或四种方法实现单例模式都可以。
2 2
- python学习教程(十三)python实现单例模式
- Python Singleton(单例模式)实现
- Python Singleton(单例模式)实现
- 单例模式(Java,Python)实现
- python 实现单例模式
- python实现单例模式
- python 实现单例模式
- Python 实现单例模式
- python实现单例模式
- Python 实现单例模式
- python实现单例模式
- Python实现单例模式
- 【Python】Python如何实现单例模式?
- 设计模式--单例模式python实现
- 设计模式十三(外观模式,python语言实现)
- 设计模式九(单例模式,python语言实现)
- 设计模式之单例模式(python实现)
- 用decorator实现python单例模式
- IOS Table中Cell的重用reuse机制分析
- PHP Web木马扫描器增强版
- 牛P的经验、经历、感受分享
- 实现屏幕截屏
- codeforces 160/B 字符串水题
- python学习教程(十三)python实现单例模式
- 维护O(1)时间查找最大元素的栈
- apache日志分析简介
- JQuery 实现ajax 实例
- mysql数据库
- 扫描目录下的php文件,是否含有木马特征
- 如何做到每天写代码?
- 设计模式之模版方法模式
- 第6周总结