Python3 实现单例设计模式

单例模式的一般实现

饿汉式

懒汉式就是通过一个方法才能实现单例,我不是很常用,所以在此就写个饿汉式。以后再补懒汉式。
单例模式的核心作用是保证一个类只有一个该类型的对象。在一个对象被过多调用时避免过多的消耗内存,即可使用单例模式。

在python中新建一个对象会调用 __new__ 方法为创建的对象分配其内存空间,并且返回该对象的引用,随后将会传给 __init__ 函数进行实例化。

一般情况下并不需要调用 new 方法,当使用单例时这一步是必要的。在重写 new 方法时需要返回当前实例的类 cls :return super().__new__(cls)。得到了分配的内存空间引用后,开始为对象进行实例化,代码可以简单的写为如下:

class ClassObj(object):def __new__(cls):print("进行分配内存")return super().__new__(cls)def __init__(self):print("开始初始化")
cobj = ClassObj()

运行结果如下:
在这里插入图片描述
但是以上的代码并没有实现单例模式,这个时候,我们需要对以上代码进行更改。
在使用 new 方法时判断是否已经被实例化:

class ClassObj(object):instance=Nonedef __new__(cls):if cls.instance is None:cls.instance=super().__new__(cls)print("进行分配内存")else:print("已经分配了")return cls.instancedef __init__(self):print("已经分配了")
cobj = ClassObj()
cobj1 = ClassObj()

以上代码在ClassObj中,定义了一个成员变量 instance,用来存储分配的空间引用,并且在__new__方法中最后return instance;假设第一次新建该类对象,instance为None则会进行实例化,假设不为None,则会提示已经分配了,不会再次分配空间,进行创建。运行结果如下:
在这里插入图片描述
以上结果只在第一次新建对象时分配了空间,之后创建对象并没有新建空间。
这时也可以直接输出类对象查看空间:

cobj = ClassObj()
cobj1 = ClassObj()
print(cobj)
print(cobj1)

结果如下是相同的:
在这里插入图片描述

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

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

相关文章

js最全的十种跨域解决方案

在客户端编程语言中,如javascript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义。同 源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。那…

剑指offer之二叉树的下一个结点

1 问题 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针 2 分析 比如我现在的二叉树如下 42 61 3 5 7 这里分3种情况 1) 如果…

查看和修改系统时间

Echo -n 不换行显示 echo -e不转义Date ‘%Y-%m-%d 查看当前时间 date-s ‘2017/09/04’表示修改时间 %w表示周 %H:%M:%S时分秒 %F%Y-%m-%d %T%H:%M:%S$()反引号 hwclock将修改后的系统时间写到bios里Date %F -d ‘-3 day’三天前 -一定要Date %F -d ‘3 day’三天以后 …

fanuc机器人码垛编程实例_FANUC 机器人码垛编程详细讲解 记得收藏!

原标题:FANUC 机器人码垛编程详细讲解 记得收藏!1. 码垛功能的定义对几个具有代表性的点进行示教,即可以从下层到上层按照顺序堆叠工件。2. 码垛的种类码垛 B:包括码垛B(单路径模式)和码垛BX(多路径模式) 适用于工件姿势恒定,堆叠…

基于casbin的ABAC/RBAC权限实践

五一假期疫情封在家也没事做,就想来优化一下一个前端容器小项目之前的TODOlist里面有一项是权限这块时隔2年了还一直没有动手迟迟没搞主要还是我太懒了,哈哈 其实我一直想要找一个轻量级的权限通用方案权限的数据源可以切换,但是逻辑基本不用…

Python3 实现建造者模式

建造者模式 建造者模式用于创建复杂的对象。使用建造者模式可以使复杂的过程层次明了、清晰,把对象的创建以及使用进行了解耦。实际上从代码的角度上看,是进行了多次封装,使代码结构更为规范合理,层次结构更加鲜明。 在一个复杂…

系列网络服务器机柜,什么是网络机柜 网络机柜和服务器机柜有哪些区别【详解】...

【网络机柜】什么是网络机柜 网络机柜和服务器机柜区别服务器机柜和网络机柜的区别服务器机柜 :用来组合安装面板、插件、插箱、电子元件、器件和机械零件与部件,使其构成一个整体的安装箱。可以配置:专用固定托盘、专用滑动托盘、电源插排、…

JS解析url

使用js解析url ,返回一个对象&#xff0c;使用函数&#xff1a; <script type"text/javascript"> var url"www.taobao.com?key0a&key1b&key2c"; function parseQueryString(url){var strurl.split("?")[1],itemsstr.split("…

Android SDK 目录说明

Android SDK目录说明: AVD Manager.exe&#xff1a;虚拟机管理工具 SDK Manager.exe&#xff1a;sdk管理工具 tools目录&#xff1a;包括测试、调试、第三方工具。模拟器、数据管理工具等。 build-tools目录&#xff1a;编译工具目录&#xff0c;包含了转化为davlik虚拟机的编译…

【3D Max】3D max如何删除环境贴图

问题描述&#xff1a;在用3dm max贴图的时候&#xff0c;如果不选中对象&#xff0c;很容易将图贴到背景环境中去&#xff0c;情况如下所示&#xff1a; 解决办法有二&#xff1a; 一、不参与渲染 快捷键8&#xff0c;在“环境和效果”窗口中去掉“使用贴图”前面的√。 二、…

剑指offer之求二叉树中两个节点的最低共同父节点

1 问题 求二叉树中俩个节点的最低共同父节点&#xff0c;比如二叉树如下 42 61 3 5 7 比如节点1和3两个节点的最低共同父节点是2&#xff0c;节点3和5两个节点的最低共同父节点是4,节点5和6两个节点的最低共同父节点是6, 也有可能其中1个节点或者2个节点不…

C#语法糖系列 —— 第四篇:聊聊 Span 的底层玩法

把 Span 归于语法糖&#xff0c;可能有些偏了&#xff0c;但偏了就偏了&#xff0c;哈哈&#xff0c;只要是分享就好&#xff0c;C# 发展至今&#xff0c;已经是一门非常重的语言了&#xff0c;所有想要的它都要&#xff0c;即可以&#xff1a;面向过程编程面向对象编程面向函数…

hdu 1556 Color the ball 线段树 区间更新

水一下 #include <bits/stdc.h> #define lson l, m, rt<<1 #define rson m1, r, rt<<1|1 using namespace std;const int MAXN 111111; int sum[MAXN<<2]; int n;void push_down(int rt, int len) {if(sum[rt] 0) return;sum[rt<<1] sum[rt];…

【ArcGIS风暴】河流水系左斜体样式经典设置方法

目录 一、效果预览 二、实现方法 一、效果预览 河流水系在作图时一般设置为左斜体、蓝色,如黄河、青海湖、洮河等,如下图所示: 二、实现方法 下面介绍在ArcGIS 10.5中的实现方法。 1、ArcGIS设置方法 绘图工具添加文字或者将标注转为注记,双击,打开属性,点击更改符号…

mlp 参数调优_积神经网络(CNN)的参数优化方法

积神经网络(CNN)的参数优化方法from&#xff1a;http://blog.csdn.net/u010900574/article/details/51992156著名&#xff1a; 本文是从 Michael Nielsen的电子书Neural Network and Deep Learning的深度学习那一章的卷积神经网络的参数优化方法的一些总结和摘录&#xff0c;并…

HBase简介(很好的梳理资料)

HBase HBaseHadoop网络应用数据结构NoSQL 一、 简介 history started by chad walters and jim 2006.11 G release paper on BigTable 2007.2 inital HBase prototype created as Hadoop contrib 2007.10 First useable Hbase 2008.1 Hadoop become Apache top-level project …

python 实现原型设计模式

原型设计模式主要在当新建一个对象的时候&#xff0c;觉得很麻烦&#xff0c;并且你又要保留当前对象。在这种情况下使用原型设计模式是一个很好的解决办法。 例如你写一个东西更新&#xff0c;不同的版本&#xff0c;这个时候以前的版本肯定要保留&#xff0c;并且从此基础上…

装服务器显示磁盘脱机,服务器磁盘处于脱机

服务器磁盘处于脱机 内容精选换一换配置目的端或启动目的端时提示“SMS.1311 目的端磁盘个数不够”。在配置目的端服务器过程中&#xff0c;会校验目的端磁盘数量是否和源端一致。当出现该错误时&#xff0c;检查目的端服务器磁盘数量是否少于源端服务器磁盘数量&#xff0c;或…

百度第三方登录

首先第三方应用要跟微信帐号合作&#xff0c;然后按照下面的方法操作&#xff1a; 目前&#xff0c;百度OAuth2.0支持五种获取Access Token的流程和一种刷新获取AccessToken方式&#xff0c;第三方可根据需求选取合适的方式&#xff1a; 百度授权的Access Token是有有效期的&am…

剑指offer之重建二叉树

1 问题 重建二叉树&#xff1a;给定二叉树的先序遍历&#xff08;根左右&#xff09;和中序&#xff08;左中右&#xff09;遍历结果&#xff0c;建立这棵二叉树。输入保证二叉树无重复结点 以先序{1, 2, 4, 7, 3, 5, 6, 8}和中序{4, 7, 2, 1, 5, 3, 8, 6}为例 2 分析 先序遍…