python单例模式继承_Python四种实现单例模式的方法

在这之前,先了解super()和__new__()方法

super()方法:

返回一个父类或兄弟类类型的代理对象,让你能够调用一些从继承过来的方法。

它有两个典型作用:

a. 在单继承的类层次结构中,super()可用于引用父类而不显式父类名称,从而使代码更易于维护。

b. 在多重继承中,可以保证公共父类仅被执行一次。

__new__方法:

a.它是一个类级别的静态方法。通常用于控制生成一个新实例的过程。

b.返回的是一个实例化出来的实例

下面为四种实现单例模式的方法

1. 使用__new__方法

class Singleton(object):

def __new__(cls, *args, **kwargs):

if not hasattr(cls, '_instance'):

orig = super(Singleton, cls)

cls._instance = orig.__new__(cls, *args, **kwargs)

rerurn cls._instance

class A(Singleton):

pass

# 类A即为单例类

2.共享属性

# 创建实例时把所有实例的__dict__指向同一个字典,这样它们都具有相同的属性和方法(类的__dict__存储对象属性)

class Singleton(object):

_state = {}

def __new__(cls, *args, **kwargs):

ob = super(Singleton,cls).__new__(cls, *args, **kwargs)

ob.__dict__ = cls._state

return ob

class B(Singleton):

pass

# 类B即为单例类

3.使用装饰器

def singleton(cls):

instance = {}

def wapper():

if cls not in instance:

instance[cls] = cls(*args, **kwargs)

return instance[cls]

return wapper

@singleton

class C:

pass

# 类C即为单例类

4.import方法

# 作为Python模块时是天然的单例模式

#创建一个sington.py文件,内容如下:

class Singleton(object):

def foo(self):

pass

mysington = Singleton()

# 运用

from sington import mysington

mysington.foo()

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

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

相关文章

linux之netstat使用--10个常用的命令

地址:http://www.thegeekstuff.com/2010/03/netstat-command-examples/ 1.列出所有的端口 netstat -a 列出TCP协议的端口 netstat -at UDP协议的端口 netstat -au 2.列出处于监听状态的socket netstat -l 列出监听的TCP端口 netstat -lt 列出监听的UDP端口 …

在Extjs中动态增加控件

Ext.onReady(function () {Ext.QuickTips.init();Ext.form.Field.prototype.msgTarget side;var autoloadcontrol new Ext.form.FieldSet({layout: "column",title: "属性表单",})var addForm new Ext.FormPanel({title: "<div aligncenter>…

C#中的数据字典Dictionary

前言今天上午和往常一样在网上冲浪,看到码甲哥微信群里面在聊一个面试题&#xff0c;比较有意思&#xff0c;这里简单分享下结论中的Dictionary字典。有50w个int类型的数字&#xff0c;现在需要判断一下里面是否存在重复的数字&#xff0c;请简要说明下。假如这个题目让我做&am…

实验 6 场景创建与执行 实验报告--软件功能测试与性能测试实验

下载链接&#xff1a; 下载链接&#xff1a; https://download.csdn.net/download/qq_44872173/20031798 内容&#xff1a;

2016年工作总结和计划

梧桐系统1、增加IT对接人、财务对接人功能开发 仲裁系统1、热敏面单未规范投诉开发2、图片统一存储和读取服务接口开发&#xff0c;提供内部调用的sdk 微信1、我要查件、自动订阅2、一键下单3、网点查询4、绑定手机号5、绑定专属业务员6、网点和业务员留言7、地址簿 待完成业务…

allegro下快捷键设置[转贴]

zz : http://yuandi6.blog.163.com/blog/static/207265185201210245435397/ 修改变量文件&#xff0c;设置自定义快捷键。 Allegro可以通过修改env文件来设置快捷键&#xff0c;这对于从其它软件如protle或PADS迁移过来的用户来说&#xff0c;可以沿用以前的操作习惯&#xff0…

改成中文版的_lol手游怎么改成中文版?英雄联盟手游中文版更改教程

阅读本文前&#xff0c;请您先点击上面的蓝色字体&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注&#xff01; 【免责声明】本文部分文字与图片资源来自于网络&#xff0c…

linux网络编程之慢系统调用被信号中断产生EINTR错误怎么解决总结

1、介绍慢系统调用 该术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用永远无法返回&#xff0c;多数网络支持函数都属于这一类。如&#xff1a;若没有客户连接到服务器上&#xff0c;那么服务器的accept调用就会一直阻塞。 慢系统调用可以被永久阻塞&#…

dotnet 替换 ASP.NET Core 的底层通讯为命名管道的 IPC 库

这是一个用于本机多进程进行 IPC 通讯的库&#xff0c;此库的顶层 API 是采用 ASP.NET Core 的 MVC 框架&#xff0c;其底层通讯不是传统的走网络的方式&#xff0c;而是通过 dotnetCampus.Ipc 开源项目提供的基于 NamedPipeStream 命名管道的方式进行通讯。相当于替换掉 ASP.N…

好想写点儿什么,但是不知道怎么写

自己已经上班了&#xff0c;但是有好多的时候还是做起事情没有一点毅力&#xff0c;不论是学习&#xff0c;还是追女生&#xff0c;还是想学习音乐。就像没有毕业的时候看C语言的书籍&#xff0c;看了一个星期&#xff0c;不想看了然后就不看了。书上面自己做的笔记过不了几天也…

上帝的玩偶:haXe语言

在动画片《我叫MT》中&#xff0c;有个“五火球神教”&#xff0c;五火球神教的口号是“征服世界”。在小说《风姿物语》中疯狂的白家的某代家主白拉登&#xff0c;他手中的扇子上写着“世界征服”四个大字。 疯狂&#xff01;只能用疯狂来形容。少年们&#xff0c;下面请看一群…

linux oracle手动启动两个实例

1、手工启动两个实例su - oraclelsnrctl start&#xff0d;&#xff0d;假设一个实例是orcl、另外一个是testexport ORACLE_SIDorclsqlplus / as sysdbastartupquitexport ORACLE_SIDtestsqlplus / as sysdbastartupquit 2、自动启动&#xff0c;可以在/etc/rc.local中设置&…

实验 7 场景运行监控及性能测试结果分析_实验报告--软件功能测试与性能测试实验

下载链接&#xff1a; 下载链接&#xff1a; https://download.csdn.net/download/qq_44872173/20031824 内容&#xff1a;

中yeti不能加载_将 PQ 查询加载到 Excel 中进行分析的三种常用的方式

点击上方蓝字 关注星标★不迷路岁月本长&#xff0c;忙者自促虽然大部分时候经过PQ清洗的数据都是加载到Excel工作表中&#xff0c;但是PQ中还有另外两种将数据返回Excel中进行分析的方法。三种不同的数据加载方式&#xff1a;Excel 智能表格仅限链接PowerPivot 数据模型一、加…

linux网络编程之用select函数实现io复用(基于TCP)引发的思考

1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:   (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。   (2)当一个客户同时处理多个套接口时,而这种情况是可能…

SQLite3.8.4.2在Windows平台下的编译和使用

2019独角兽企业重金招聘Python工程师标准>>> SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine. SQLite is the most widely deployed SQL database engine in the world. The …

【招聘(北京武汉)】北京高远华信科技 .NET 高级工程师

职位名称&#xff1a;.NET Core 高级工程师培养方向&#xff1a;架构师、技术总监月薪&#xff1a;15k-20k工作地点&#xff1a;北京、武汉职位信息1、理解后端架构&#xff0c;与后端工程师配合&#xff0c;为项目提供最优化的.NET Core技术解决方案&#xff1b;2、根据项目要…

通过邮箱远程控制电脑

转自本人在知乎上面的答案印如意Fitz 通过往邮箱发送邮件&#xff0c;从而达到控制电脑or开始抓取数据or播放音乐等系列操作。 like that: 先用我的常用邮箱给我备胎邮箱发送一封主题为“shutdown”的邮件 然后我要关机的电脑检测到了自动关机并发挥一封主题为“already shutdo…

上海纳税百强2016,邢台2017纳税百强,深圳百强企业

上海纳税百强企业名单公布。市税务部门组织的税收收入达到11847.0亿元&#xff0c;同比增长5.5%&#xff0c;增收616.6亿元&#xff1b;剔除证券交易印花税后&#xff0c;税收收入完成11380.6亿元&#xff0c;同比增长15.1%&#xff0c;其中&#xff0c;第三产业税收收入完成81…

Oracle DBA

实验7 Oracle数据库安全管理 1&#xff0e;实验目的 &#xff08;1&#xff09;掌握Oracle数据库安全控制的实现。 &#xff08;2&#xff09;掌握Oracle数据库用户管理。 &#xff08;3&#xff09;掌握Oracle数据库权限管理。 &#xff08;4&#xff09;掌握Oracle数据…