Python代码篇-单例模式(五种实现单利方式)
(一)、如何反序的迭代一个序列?
# 如果是一个list,最来的解决方案是tempList = [1,2,3,4]
tempList.reverse()
for x in tempList:print x
# 如果不是一个list,最通用的解决方案
print '\n- - - - - - - - - - - -'
tempTuple = (1,2,3,4)
for i in range(len(tempTuple)-1,-1,-1):print tempTuple[i]
(二)、 如何用Python来进行查询和替换一个文本字符串?
# Python 中的 replace() 可以进行字符串替换
tempStr = "Hello java, Hello Python , Use JavaScript"
print tempStr.replace("Hello","Use")# Python 中的 sub() 可以用来查找并替换字符串, sub() 是使用正则来匹配
import re
rex = r'(Hello|Use)'
print re.sub(rex, 'Bye', tempStr)
(三)、使用Python实现单例模式。
- 所谓单例就是一个类从始至终只能产生一个实例。
- 方法一:使用new方法
- 在new方法中把类实例绑定到类变量_instance上,如果cls._instance为None表示该类还没有实例化过,实例化该类并返回。如果cls_instance不为None表示该类已实例化,直接返回cls_instance
- 方法二:使用装饰器(decorator)
- 方法三:使用metaclass(元类)
- 方法四:共享属性
- 所谓单例就是所有的引用(实例,对象)拥有相同的属性和方法,同一个类的实例天生都会有相同的方法,那我们只需要保证同一个类所产生的实例都具有相同的属性。所有实例共享属性最简单直接的方法就是共享dict属性指向。
- 方法五:Python模板
方法一 使用new方法
class SingleTon(object):def __new__(cls, *args, **kwargs):if not hasattr(cls,'_instance'):cls._instance = object.__new__(cls,*args,**kwargs)return cls._instanceclass TestClass(SingleTon):a = 1test1 = TestClass()
test2 = TestClass()print test1.a, test2.a
print id(test1),id(test2)
方法二:使用装饰器(decorator)
def SingleTon(cls, *args, **kwargs):instances = {}def _singleton():if cls not in instances:instances[cls] = cls(*args, **kwargs)return instances[cls]return _singleton@SingleTon
class TestClass(object):a = 1test1 = TestClass()
test2 = TestClass()print test1.a ,test2.a
test1.a = 2
print test1.a ,test2.a
print id(test1),id(test2)
方法三:使用metaclass(元类)
class SingleTon(type):def __init__(cls,name,bases,dict):super(SingleTon,cls).__init__(name,bases,dict)cls._instance = Nonedef __call__(cls, *args, **kwargs):if cls._instance is None:cls._instance = super(SingleTon,cls).__call__(*args, **kwargs)return cls._instanceclass TestClass(object):__metaclass__ = SingleTontest1 = TestClass()
test2 = TestClass()test1.a = 1
print test1.a ,test2.a
test1.a = 2
print test1.a ,test2.a
print id(test1),id(test2)
方法四:共享属性
class SingleTon(object):_state = {}def __new__(cls, *args, **kwargs):obj = object.__new__(cls, *args, **kwargs)obj.__dict__ = cls._statereturn objclass TestClass(SingleTon):a = 1print test1.a ,test2.a
test1.a = 2
print test1.a ,test2.a
print id(test1),id(test2)
方法五:Python模板
#
class My_SingleTon(object):def foo(self):pass
my_sign = My_SingleTon()my_sign.foo()
Python代码篇-单例模式(五种实现单利方式)相关推荐
- python中函数的五种参数传递的方式
在学习了python函数之后发现它的函数值传递有几种是不同于其他语言的,详细内容参见下面的代码,我都有做内容解释 #位置传参,很简单,就平常使用的方式 #关键字传参 def use_in(name,a ...
- python list方法说明_对python中list的五种查找方法说明
Python中是有查找功能的,五种方式:in.not in.count.index,find 前两种方法是保留字,后两种方式是列表的方法. 下面以a_list = ['a','b','c','hell ...
- python list find函数_对python中list的五种查找方法说明
Python中是有查找功能的,五种方式:in.not in.count.index,find 前两种方法是保留字,后两种方式是列表的方法. 下面以a_list = ['a','b','c','hell ...
- OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式...
OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式 以最简单的4 x 5三通道图像为例,其在内存中Mat类型的数据组织形式如下: 每一行的每一列 ...
- 集丰照明|LED五种调光方式详解(DALI/DMX/0-10V/PWM/可控硅)
LED五种调光方式详解 LED的发光原理同传统照明不同,同功率的 LED 光源,因其采用的芯片不同,电流电压参数则不同,故其内部布线结构和电路分布也不同,导致了各生产厂商的光源对调光驱动的要求也不尽相 ...
- 下列哪个不是目前python里的内置模块-python引入模块的五种方式与内置模块
模块导入的五种方式 1.import 模块名 2.from 模块名 import 方法名 3.from 模块名 import * 4.import 模块名 as 别名 5.from 模块名 impor ...
- python代码解读软件_5种带你轻松分析Python代码的软件库
[51CTO.com快译]通常,人们会使用两种速度来衡量某种编程语言的优劣,即:开发速度和执行速度.对于Python而言,大家往往受益的是它能够快速地编写代码,而忽略了它是否能够快速地运行,并及时完成 ...
- python引入模块的五种方式与内置模块
模块 自定义模块 模块的定义与分类 模块的定义 简而言之,模块就是一些常用功能的集合,我们把一些常用的函数.变量或者方法写到一个python文件中,那么这个python文件就是模块,使用模块可以避免我 ...
- vba九九乘法表代码_用五种方法利用EXCEL制作九九乘法表
昨天因贪玩了一下,一天都和同事在外面玩,计划就是这一天让自己啥也不做,一天玩下来,觉得好累,原来玩也是很累的.既然在外面放松了一天了,今天就把昨天的九九乘法表的制作方法给补上来.事实上九九乘法表的制作 ...
最新文章
- findler mac 隐藏文件_Fiddler使用文档
- 重启mysql的方法
- java filestream 包,java.io.FileOutputStream.write(byte[] b)
- 图片三:numpy制作雪碧图(如何将多个图片拼接成一张图片)
- java旺季机票_java-第四章-机票价格受到淡季旺季的影响,编写的小程序
- SAP CRM中间件下载时数据库表CRMATAB为空的处理方法
- 更新mac系统中homebrew的源,更改为清华大学的源
- 深入Asyncio(八)异步迭代器
- Node.js 教程第五篇——request
- mysql 好用 客户端_5款好用的mysql客户端
- win10计算机系统优化设置,Win10不如win7?超实用win10系统优化设置,让电脑运行更流畅!...
- C#之使用RichTextBox 实现简单的txt编辑器
- Docker编译安装httpd
- 此计算机未运行正版windows,最近一开机就有以下之警告:此Windows副本未通过正版Windows验证。...
- 我的学习工作经历,一个园林专业中专毕业生的IT之路 学习编程 创业
- 豆沙绿护眼色样式在html中的代码
- HMM(隐马尔可夫)笔记
- nRF51822定时器设置
- 第一次使用acme.sh 手动生成证书(DNS手动模式)
- 3D max新增超级阵列功能Array !