【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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈数据库索引

1.什么是索引 数据库索引好比是一本书前面的目录,能加快数据库的查询速度。 例如这样一个查询:select * from table1 where id44。如果没有索引,必须遍历整个表,直到ID等于44的这一行被找到为止;有了索引之后(必须是在ID这一列上建…

iphone屏幕突然变暗_如果你的iPhone屏幕突然变暗,可以这样解决

​​如果在使用 iPhone 的过程中,屏幕忽然变暗,可能有如下原因:开启了“亮度自动调节”功能在 iPhone 中有一项“亮度自动调节”的功能,此功能是根据设备周围的光线条件来调整亮度级别:在光线较暗的地方,传…

宏块与宏块对(附图)

宏块与宏块对(附图) 假设 A、B 是上下相邻的两个 MB:在非宏块对的情况下:A、B宏块序号不连续,相差图像一行宏块个数。即按光栅扫描顺序编号。在帧宏块对的情况下:A、B宏块序号连续,即按锯齿扫描…

农业部部署农业大数据发展工作 评:对农业现代化很重要

据中国乡村之声《三农中国》报道,近日,农业部近日印发了《关于推进农业农村大数据发展的实施意见》,全面部署农业农村大数据发展工作。 《意见》明确了农业农村大数据发展和应用的五大基础性工作和十一个重点领域,包括夯实国家农业…

HTML中的链接

HTML链接 <a>标签可以在网页上定义一个链接地址&#xff0c;通过href属性定义跳转的地址&#xff0c;通过title属性定义鼠标悬停时弹出的提示文字框。 <a href"#"></a> <!-- # 表示链接到页面顶部 --> <a href"http://www.itxdl.…

【MySQL】Linux端-实现Mysql数据定时自动备份

Linux端-实现Mysql数据定时自动备份 创建存放备份 sql 的文件夹 备份数据尽量存放在Linux单独挂载的磁盘上&#xff0c;保证数据可靠性。磁盘建议使用EXT4分区格式。 [rootlocalhost ~]# mkdir /sk/mysqlBackup测试命令行备份数据库 [rootlocalhost ~]# /usr/bin/mysqldump --o…

视频测试序列的下载地址

1、http://www.tkn.tu-berlin.de/research/vid/&#xff08;此网站已经移走&#xff0c;正在寻找。&#xff09; CIF&#xff1a; Akiyo、Bridge (far) 、Bridge (close) 、Bus 、Container 、Coastguard 、Flower 、Football 、Foreman 、Hall 、Highway 、Mobile & Cal…

xtrabackup迁移单独一张INNODB表

转载于:https://www.cnblogs.com/llguanli/p/6746130.html

c语言有趣代码_为什么C语言永远不会过时?

直至今天还有人在喊着C语言都过时的语言了&#xff0c;还有什么值得去学的&#xff0c;看现在的python&#xff0c;php等语言现在用起来多简单&#xff0c;谁还去学习老掉牙的C语言&#xff0c;事实真的是这样的吗&#xff1f;笔者作为专门下载了这两种语言的底层源码。由于篇幅…

Pokemon Go将在日本发布 网络安全公司呼吁防范虚假软件

据《每日新闻》报道&#xff0c;手游《Pokemon Go》(精灵宝可梦Go)在海外人气爆棚&#xff0c;日本国内也有望近日发布。日本网络安全公司呼吁&#xff0c;在正式发布前需防范虚假游戏软件。 美国英特尔集团迈克菲公司&#xff08;东京都涩谷区&#xff09;表示&#xff0c;《P…

【接口文档】Django restful framework中自动生成API文档

Django restful framework中自动生成API文档 一、Swagger概述 1.引言 当接口开发完成&#xff0c;紧接着需要编写接口文档。传统的接口文档使用Word编写&#xff0c;or一些接口文档管理平台进行编写&#xff0c;但此类接口文档维护更新比较麻烦&#xff0c;每次接口有变更&am…

HTML中的列表

HTML列表 无序列表 在网页上定义一个无编号的内容列表可以用<ul>、<li>配合使用来实现&#xff0c;代码如下&#xff1a; <ul><li>列表文字一</li><li>列表文字二</li><li>列表文字三</li> </ul>在网页上生成的列…

【ujson】pip安装ujson报错: error:Microsoft Visual C++ 14.0 is required

在win10上pip安装ujson报错 在使用pip安装依赖包ujson时&#xff0c;遇到了问题&#xff0c;如下&#xff1a; building ujson extension error: Microsoft Visual C 14.0 is required. Get it with "Microsoft Visual C Build Tools": http://landinghub.visua…

HTML中的表格

HTML表格 table常用标签 1、table标签&#xff1a;声明一个表格 2、tr标签&#xff1a;定义表格中的一行 3、td和th标签&#xff1a;定义一行中的一个单元格&#xff0c;td代表普通单元格&#xff0c;th表示表头单元格 table常用属性&#xff1a; 1、border 定义表格的…

CS224n笔记13 卷积神经网络

为什么80%的码农都做不了架构师&#xff1f;>>> 本文由码农场同步&#xff0c;最新版本请查看原文&#xff1a;http://www.hankcs.com/nlp/cs224n-convolutional-neural-networks.html 补充了NLP中相对冷门的CNN&#xff0c;谈了谈调参与发论文的潜规则。从RNN到CN…

android tcp socket框架_socket网络编程知识梳理,让你学会造轮子的能力

在前面几篇中&#xff0c;我给大家介绍了socket的相关知识&#xff0c;也给出了详细的代码&#xff0c;从socket的基本介绍&#xff0c;到IO多路复用&#xff0c;以及粘包拆包&#xff0c;最后到心跳包问题。总的来说大概都把socket网络编程中能碰见的问题都讲了&#xff0c;但…

264分析两大利器:264VISA和Elecard StreamEye Tools

学了264有将近3个月有余&#xff0c;好多时候都在学习老毕的书和反复看JM86的代码&#xff0c;最近才找到264分析两大利器&#xff1a;264VISA和Elecard StreamEye Tools。不由得感叹&#xff0c;恨不逢同时。 简单的说下这两个软件&#xff1a; 264visa 强力的h264实时分析工具…

【解决】Django错误(1146,Table 'xxxx.django_session' doesn't exist)

报错 解决办法&#xff0c;settings.py中取消这行注释&#xff0c;讲session放缓存中 没执行迁移的话&#xff0c;可能是debugtoolbar 把内容存储在session中了 session最后也是放在redis里面的

QTP提供的编程接口实现对QTP操作

我们可以通过调用 Automation Object Model 里的对象接口 ,来实现对QTP 的操作,如打开 /运行脚本等动作Automation object model 的对象结构图如下 (摘自QTP 参考手册 )最新内容请见作者的GitHub页&#xff1a;http://qaseven.github.io/

正态性检验ks和sw区别_非参数检验思路总结,清晰理解就靠它了!

1. 何时使用非参数检验或许你还没有理解什么是参数检验、非参数检验&#xff0c;但一定曾在无意之中使用过它们。如我们常用的方差分析、T检验&#xff0c;都属于参数检验。参数检验&#xff0c;就是假定数据服从某种分布&#xff0c;通过样本信息对总体参数进行检验。因而在分…