【Python】单例模式Singleton
前两天一个面试被问到python中单例模式有几种实现方式,只答出了可以用元类实现。。。然后就想不起来了。
之后翻书,原来这些之前都见过的啊。。。。
1.手动实现真正创建实例的方法__new__()来实现
class Singleton(object):
_instance = None def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance if __name__ == '__main__':
s1 = Singleton()
s2 = Singleton()
assert id(s1) == id(s2)
2,利用元类实现:
class Singleton(type):
def __init__(cls, name, bases, dic):
super(Singleton, cls).__init__(name, bases, dic)
cls.instance = None def __call__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance = super(Singleton, cls).__call__(*args, **kwargs)
return cls.instance class MySingleton(object):
__metaclass__ = Singleton
3,利用装饰器实现
def Singleton1(aclass):
instance = None
def oncall(*args):
nonlocal instance
if instance == None
instance = aclass(*args)
return instance
return oncall class singleton2:
def __init__(self, aclass):
self.aclass = aclass
self.instance = None def __call__(self, *args):
if self.instance == None:
self.instance = self.aclass(*args)
return self.instance
4.共享属性
class Borg(object):
_state = {}
def __new__(cls, *args, **kw):
ob = super(Borg, cls).__new__(cls, *args, **kw)
ob.__dict__ = cls._state
return ob class MyClass2(Borg):
a = 1
5.import实现
# mysingleton.py
class My_Singleton(object):
def foo(self):
pass my_singleton = My_Singleton() # to use
from mysingleton import my_singleton my_singleton.foo()
参考资料:1.改善python程序的91个建议
2.Python学习手册
3.http://python.jobbole.com/85231/
4.Python Cookbook
【Python】单例模式Singleton的更多相关文章
- Python单例模式(Singleton)的N种实现
		很多初学者喜欢用全局变量,因为这比函数的参数传来传去更容易让人理解.确实在很多场景下用全局变量很方便.不过如果代码规模增大,并且有多个文件的时候,全局变量就会变得比较混乱.你可能不知道在哪个文件中定义 ... 
- python单例模式的实现与优化
		python单例模式的实现与优化 阅读目录(Content) 单例模式 实现单例模式的几种方式 1.使用模块 2.使用装饰器 3.使用类 4.基于__new__方法实现(推荐使用,方便) 5.基于me ... 
- 设计模式之单例模式——Singleton
		设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ... 
- 【白话设计模式四】单例模式(Singleton)
		转自:https://my.oschina.net/xianggao/blog/616385 0 系列目录 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factor ... 
- ooad单例模式-Singleton
		单例模式Singleton 主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 比如建立目录 ... 
- iOS单例模式(Singleton)写法简析
		单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ... 
- 浅谈设计模式--单例模式(Singleton Pattern)
		题外话:好久没写blog,做知识归纳整理了.本来设计模式就是个坑,各种文章也写烂了.不过,不是自己写的东西,缺少点知识的存在感.目前还没做到光看即能记住,得写.所以准备跳入设计模式这个大坑. 开篇先贡 ... 
- 设计模式之——单例模式(Singleton)的常见应用场景
		单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此 ... 
- 设计模式之单例模式(Singleton Pattern)
		单例模式 单例模式(Singleton Pattern)在java中算是最常用的设计模式之一,主要用于控制控制类实例的数量,防止外部实例化或者修改.单例模式在某些场景下可以提高系统运行效率.实现中的主 ... 
- 设计模式(4) -- 单例模式(Singleton)
		设计模式(4) -- 单例模式(Singleton) 试想一个读取配置文件的需求,创建完读取类后通过New一个类的实例来读取配置文件的内容,在系统运行期间,系统中会存在很多个该类的实例对象,也就是说 ... 
随机推荐
- HDU 1431 思维 基础数论
			找范围内回文素数,最大到1e8,我就是要枚举回文串,再判素数,然后因为这种弱智思路死磕了很久题目. /** @Date : 2017-09-08 15:24:43 * @FileName: HDU 1 ... 
- Crash Consistency : FSCK and Journaling
			现在开始今天的第三篇博客的撰写,不能扯淡了,好多任务啊.但是还是忍不住吐槽一下,之前选择这篇文章纯属是个意外,我把Crash看做了Cache,唉,要不然也就不用写这篇文章了. 1. 这篇博客讲什么? ... 
- 遍历hashmap
			转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: Map map = new HashM ... 
- 【Atcoder】AGC022 C - Remainder Game 搜索
			[题目]C - Remainder Game [题意]给定n个数字的序列A,每次可以选择一个数字k并选择一些数字对k取模,花费2^k的代价.要求最终变成序列B,求最小代价或无解.n<=50,0& ... 
- 20155117 王震宇 2006-2007-2 《Java程序设计》第四周学习总结
			教材学习内容总结 继承(inheritance) 继承是面向对象软件技术当中的一个概念.继承可以使得子类别具有父类别的各种属性和方法,避免了重复的行为定义.在子类别继承父类别的同时,可以重新定义某些属 ... 
- phpcms添加子栏目后的读取
			一个栏目下面如果没有子栏目,那么它调用的模板就是列表页模板(及list_为前缀的模板):如果一个栏目下面有子栏目,那么它调用的就是栏目首页模板(category_为前缀的模板). 所以,当你这个栏目添 ... 
- onblur & onchange
			本文地址:http://www.cnblogs.com/veinyin/p/7606914.html 两者均可用于验证是否输入数据 onblur : 表示不再是焦点,是 onfocus 的相反事件, ... 
- 旅游(CSUST省赛选拔赛2+状压dp+最短路)
			题目链接:http://csustacm.com:4803/problem/1016 题目: 思路:状压dp+最短路,比赛的时候有想到状压dp,但是最短路部分写挫了,然后就卡死了,对不起出题人~dis ... 
- 2017ACM暑期多校联合训练 - Team 6 1002     HDU  6097   Mindis  (数学)
			题目链接 Problem Description The center coordinate of the circle C is O, the coordinate of O is (0,0) , ... 
- Ubuntu命令设置ip网关dns
			本文系转载,介绍Ubuntu如何设置IP和网络来连接网络 如果是在虚拟机中使用Ubuntu,那么设置之前请先参照我的上一遍文章虚拟机Net方式设置连接外网中的网络设置部分,先设置好主机的网络,然后配置 ... 
