Python(25)-单例设计模式

单例设计模式

  • 1.单例设计模式
  • 2.__new__方法
  • 3.初始动作只执行一次

本系列博文来自学习《Python基础视频教程》笔记整理,视屏教程连接地址:http://yun.itheima.com/course/273.html

1.单例设计模式

设计模式:不同的问题使用不同的解决套路。学习设计模式,在遇到已经有的问题时就直接使用套路解题就行了。

单例设计模式的应用场景:
音乐播放器、回收站、打印机 这些对象都只有一份,只有唯一的一个存在

单例设计模式:目的,让类创建的对象,在系统中只有唯一的一个实例,每次执行**类名()**返回对象,内存地址是相同的。

2.__new__方法

两个下划线开头,两个下划线结尾的方法(内置方法),是object类内置的一个 静态方法 。利用类创建对象时,由__new__方法给新建的对象分配空间,并将对象的引用返回给解释器。解释器进一步将这个引用返回给方法的初始化方法中的self 参数,并调用初始化方法。

重写new方法–实现单例的目的

class MusicPlayer(object):# 定义一个类属性,初始值为none 用于记录对象的引用# 第一次调用时赋值,后来调用就直接返回第一次调用的就行instance=Nonedef __new__(cls, *args, **kwargs):# 1.判断类属性是否是空对象if cls.instance is None:# 调用父类的方法,为第一个对象分配空间cls.instance=super().__new__(cls)# 返回类属性保存的对象引用return cls.instancepass
#创建多个对象
player1=MusicPlayer()
player2=MusicPlayer()print(player1)
print(player2)

输出:

<main.MusicPlayer object at 0x7f130b3be470>
<main.MusicPlayer object at 0x7f130b3be470>

3.初始动作只执行一次

在上面代码中,虽然每次使用类创建对象都指向相同的引用,但是初始化方法却是每次创建对象都会被调用,所以能做的就是让每次自动执行的初始化方法中个初始化动作只执行一次。

class MusicPlayer(object):# 定义一个类属性,初始值为none 用于记录对象的引用# 第一次调用时赋值,后来调用就直接返回第一次调用的就行instance=Noneint_flag=Falsedef __new__(cls, *args, **kwargs):# 1.判断类属性是否是空对象if cls.instance is None:# 调用父类的方法,为第一个对象分配空间cls.instance=super().__new__(cls)# 返回类属性保存的对象引用return cls.instancedef __init__(self):# 判断是否执行过初始化动作,if MusicPlayer.int_flag :return# 没有执行过,执行初始化动作                print("初始化方法执行啦")# 修改类属性标记MusicPlayer.int_flag=True#创建多个对象
player1=MusicPlayer()
player2=MusicPlayer()print(player1)
print(player2)

输出

初始化方法执行啦
<main.MusicPlayer object at 0x7f4ea08da438>
<main.MusicPlayer object at 0x7f4ea08da438>

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

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

相关文章

Linux Socket通信 C/S模型

代码片段(8) [代码] MySocket.h 01#ifndef _MYSOCKET_0623_H 02#define _MYSOCKET_0623_H 03 04#include <sys/socket.h> 05#include <sys/types.h> 06#include <arpa/inet.h> 07#include <netinet/in.h> 08#include <sys/wait.h> 09#include &…

Java多线程——基本概念

线程和多线程 程序&#xff1a;是一段静态的代码&#xff0c;是应用软件执行的蓝本 进程&#xff1a;是程序的一次动态执行过程&#xff0c;它对应了从代码加载、执行至执行完毕的一个完整过程&#xff0c;这个过程也是进程本身从产生、发展至消亡的过程 线程&#xff1a;是比…

textCNN初探

文章目录目录1.什么是textCNN1.1 textCNN 提出的背景1.2 textCNN 合理性分析2.textCNN相比于传统图像领域的CNN有什么特点&#xff1f;3.textCNN例子讲解3.1 参数和超参数3.2 textCNN的数据3.3 textCNN的网络结构定义3.4 代码目录 1.什么是textCNN 1.1 textCNN 提出的背景 我…

Python(28)-异常

异常1.抛出异常2.捕获异常3.依据错误类型捕获异常4.捕获未知错误5.异常捕获的完整语法6.异常传递7.主动抛出异常本系列博文来自学习《Python基础视频教程》笔记整理&#xff0c;视屏教程连接地址&#xff1a;http://yun.itheima.com/course/273.html1.抛出异常 抛出异常&#…

词嵌入初探

文章目录目录1.词嵌入产生的背景1.1 NLP关键&#xff1a;语言的表示1.2 NLP词的表示方法类型1.2.1 独热表示one-hot1.2.2 词的分布式表示distributed representation1.3 NLP中的语言模型1.4 词的分布表示1.4.1 基于矩阵的分布表示1.4.2 基于聚类的分布表示1.4.3 基于神经网络的…

Pytorch(5)-梯度反向传播

自动求梯度1. 函数对自变量x求梯度--ax^2b2. 网络对参数w求梯度- loss(w,x)3. 自动求梯度的底层支持--torch.autograd3.1 Variable3.1.1 Variable构造函数3.1.2 Variable链式求导--backward()3.1.3 Variable反向传播函数--grad_fn3.2 计算图3.2.1 动态创建计算图3.2.2 非叶子节…

VIM使用系列之一——配置VIM下编程和代码阅读环境

作者&#xff1a;gnuhpc from http://blog.csdn.net/gnuhpc http://gnuhpc.wordpress.com/ 本文环境&#xff1a;ubuntu 10.10/vim7.2 前言&#xff1a;一年前写过一篇关于VIM的C/C编程环境的文字&#xff0c;一年中又接触了很多东西&#xff0c;深入使用中发现其实还是需要有…

fastText初探

目录&#xff1a;1、应用场景2、优缺点3、FastText的原理4、FastText词向量与word2vec对比 目录&#xff1a; 1、应用场景 fastText是一种Facebook AI Research在16年开源的一个文本分类器。 其特点就是fast。相对于其它文本分类模型&#xff0c;如SVM&#xff0c;Logistic …

mpiBlast安装详解以及使用说明

Getting mpiblast 现在下载包文件&#xff1a; wget http://www.mpiblast.org/downloads/files/mpiBLAST-1.6.0-pio.tgz 解压包文件&#xff1a; tar xvzf mpiBLAST*.tgz 然后下载ncbi&#xff1a; wget ftp://ftp.ncbi.nih.gov/toolbox/ncbi_tools/old/20061015/ncbi.tar.gz…

Pytorch(6)-设置随机种子,复现模型结果

设置随机种子&#xff0c;复现模型结果1.Python本身的随机因素2.numpy随机因素3.pytorch随机因素在很多情况下&#xff0c;我们希望能够复现实验的结果。为了消除程序中随机因素的影响&#xff0c;我们需要将随机数的种子固定下来。将所有带随机因素的种子全部固定下来后&#…

如何让自己学习?

阶段性反馈机制&#xff08;如何持之以恒、让自己发疯&#xff09; 反馈机制是王者荣耀的核心武器&#xff0c;击杀野怪获得金币&#xff0c;不断地努力&#xff0c;获得奖励是我们不断的玩这个游戏的主要原因&#xff0c;也是人的本能&#xff0c;我什么都得不到凭什么这么做&…

追女孩子必备

当然&#xff0c;首先要知道女孩子的手机号码。 其次&#xff0c;要对她有兴趣啦。 发个短信&#xff1a;“上次跟你聊天很愉快&#xff0c;能否再次邀你出来聊聊天&#xff1f;” 注意&#xff1a;女孩子答应的话&#xff0c;要找的地点是个比较清静的酒吧&#xff0c;暂时别去…

python中使用“if __name__ == '__main__'”语句的作用

首先用最简洁的语言来说明一下 if __name__ __main__: 的作用&#xff1a;防止在被其他文件导入时显示多余的程序主体部分。 先举个例子&#xff0c;如果不用if __name__ __main__: 会发生什么事&#xff1a; 首先在yy.py中调用cs.py #yy.pyimport csprint(引用cs)cs.cs()p…

bishi

鄙视 2011-04-26 20:43:02| 分类&#xff1a;默认分类 |字号订阅腾讯笔试题&#xff1a;const的含义及实现机制 const的含义及实现机制&#xff0c;比如&#xff1a;const int i,是怎么做到i只可读的&#xff1f; const用来说明所定义的变量是只读的。 这些在编译期间完成&…

NLP复习资料(1)-绪论、数学基础

NLP复习资料-绪论、数学基础1.绪论2.数学基础2.1信息论基础&#xff1a;2.2应用实例&#xff1a;词汇消歧国科大&#xff0c;宗老师《自然语言处理》课程复习笔记&#xff0c;个人整理&#xff0c;仅供参考。1.绪论 1&#xff0e; 语言学、计算语言学、自然语言理解、自然语言…

redis——sentinel

什么是哨兵机制 Redis的哨兵(sentinel) 系统用于管理/多个 Redis 服务器,该系统执行以下三个任务: 监控: 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。 提醒:当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他…

珍藏

http://www.cnblogs.com/leoo2sk/archive/2011/04/19/nginx-module-develop-guide.html http://ldl.wisplus.net/page/6/

FM,FFM及其实现

在推荐系统和计算广告业务中&#xff0c;点击率CTR&#xff08;click-through rate&#xff09;和转化率CVR&#xff08;conversion rate&#xff09;是衡量流量转化的两个关键指标。准确的估计CTR、CVR对于提高流量的价值&#xff0c;增加广告及电商收入有重要的指导作用。业界…

linux-在cenos上安装大全(nginx/JRE/maven/Tomcat/MYSQL/redis/kafka/es...)

云服务器 阿里云 腾讯云 七牛云 百度云 天翼云 华为云 西部数码 自己购买一个&#xff0c;学生和企业用户都有优惠的。 putty 自己下载一个putty&#xff0c;用来操作云服务器。 putty.org 一路下一步就ok。 点击putty.exe,输入你的ip或域名 最好改成20&#xff1…

NLP复习资料(2)-三~五章:形式语言、语料库、语言模型

NLP复习资料-三~五章1.第三章&#xff1a;形式语言2.第四章&#xff1a;语料库3.第五章&#xff1a;语言模型国科大&#xff0c;宗老师《自然语言处理》课程复习笔记&#xff0c;个人整理&#xff0c;仅供参考。1.第三章&#xff1a;形式语言 1.语言描述的三种途径&#xff1a…