学习python: 单例设计模式
简介:
本文主要讲两个问题:
pyhton创建一个对象的过程。
单例设计模式的一种实现方式。
python 创建一个对象的过程
当我们实例化一个对象的时候,基本上可以分为如下步骤:
调用
__new__(cls)
方法来创建一个对象,然后找了一个变量来接受__new__
的返回值,这个返回值表示创建出来的对象的引用调用
__init__(刚创建出来的对象的引用)
方法,初始化成员变量。返回对象的引用
注意,这里__new__
方法里面需要传递的参数是cls
,指的是
我们可以拿
python
创建一个对象的过程和c++
的构造函数做个对比。显然c++
的构造函数即负责创建对象,又负责初始化成员变量; 而python
是通过两个步骤来完成的:__new__(cls)
方法只负责创建对象,__init__
方法只负责初始化成员变量。
从上面的总结来看,一个常见的误区就是错误的把
__init__
方法等价于构造函数,严格来说他们是不等价的。
单例模式的一种实现方式
有了上述__new__
方法的机制,我们可以设计一个单例模式如下:
这里增加了一个附加的东西,即设计一个单例的同时只初始化一次成员变量。
class Singleton(object):__instance = None__init_flag = False def __new__(cls, *args, **kwargs):if cls.__instance == None:cls.__instance = object.__new__(cls)return cls.__instancedef __init__(self, num): # 这里通过设置一个类属性的方式实现了只初始化一次成员变量的目的if not Singleton.__init_flag:self.num = numSingleton.__init_flag = Trues = Singleton(100)
print(s.num)s1 = Singleton(200) # 第二次初始化参数时不会打印200
print(s1.num)# Output
100
100
学习python: 单例设计模式相关推荐
- Python单例设计模式
(1)为什么使用设计模式? 使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. (2)单例设计模式概念 让类创建的对象只有唯一的一个实例,即每次执行 类名() 返回的对象,内存地 ...
- python单例设计模式(待补充)
要点概论: 1. 理解单例设计模式 2. 单例模式中的懒汉式实例化 3. 模块级别的单例模式 4. Monostate单例模式 5. 单例和元类 6.单例模式Ⅰ 7. 单例模式Ⅱ 8. 单例模式的缺点 ...
- python:单例设计模式
学习目标: python单例设计模式 学习内容: 1.设计模式:前人工作的总结和提炼,针对某一特定问题的成熟的解决方案 使用设计模式:可重用代码.让代码更容易被他人理解.保证代码可靠性 2.单例设计模 ...
- java设计扑克牌比大小_2019-08-09Day10 单例设计模式,扑克牌比大小游戏(Java)
目的 学习了解单例设计模式的相关知识,并在前几天Java学习的基础上,完善所学的知识,完成扑克牌比大小的游戏,能实现的功能有,游戏显示页面,玩家信息页面(包括玩家姓名 编号 所持有的资金),生成一副扑 ...
- Python 学习笔记 类的封装 类的继承 多态继承 类方法和静态方法 单例设计模式
一.类的封装: 1.概念: 广义的封装:函数和类的定义本身,就是封装的体现 狭义的封装:一个类的某些属性,在使用的过程 中,不希望被外界直接访问,而是把这个属性给作为私有的[只有当前类持有],然后暴露 ...
- python基础知识整理 第七节:单例设计模式、异常、模块、包、制作模块、文件
1.单例设计模式 单例设计模式就是为对象在内存中分配空间的时候,永远只会返回一个唯一的固定的内存空间.这样就能保证在内存中这个类的对象只有唯一的一份,这个就叫做单例.(为对象分配空间使用的是内置方法_ ...
- Python(25)-单例设计模式
单例设计模式 1.单例设计模式 2.__new__方法 3.初始动作只执行一次 本系列博文来自学习<Python基础视频教程>笔记整理,视屏教程连接地址:http://yun.itheim ...
- 设计模式学习笔记——单例(Singleton)模式
设计模式学习笔记--单例(Singleton)模式 @(设计模式)[设计模式, 单例模式, Singleton, 懒汉式, 饿汉式] 设计模式学习笔记单例Singleton模式 基本介绍 单例案例 类 ...
- 结合Spring源码学习单例设计模式
之前我学习了 Spring Ioc,明白了 Spring IoC 容器是一个管理Bean的容器,在Spring的定义中,它要求所有的IoC容器都需要实现接口 BeanFactory ,它是一个顶级容器 ...
- 单例设计模式(拉勾教育大数据学习笔记)
单例设计模式的概念: 在某些特殊场合中,一个类对外提供且只提供一个对象时,这样的类叫做单例类,而设计单例的流程和思想叫做单例设计模式. 单例设计模式的实现流程: 1. 私有化构造方法,使用privat ...
最新文章
- leetcode--整数反转--python
- 第1章python基础语法1
- PolyData之DataBounds
- 快速生成NHibernate的映射文件和映射类的利器 —— codesmith软件
- ASP.NET Core开发常见“坑”
- htm怎么让图片和搜索框在同一行_新手怎么玩好小红书
- BZOJ 2957 楼房重建 (分块)
- pureftpd 如何修改管理员密码
- JavaScript面试大全(二)
- 21.IO-multiplexing方式实现Netcat
- 作业4 猜数字游戏jsp
- 竹林蹊径:深入浅出Windows驱动开发
- java多线程基础_深入了解Java多线程的基础知识!
- PHP学习思维导图--小树好久没长大了,给它加点枝叶
- word三线表最后一行加粗方式
- 从事计算机专业的人职业道德,计算机专业技术人员职业道德建设研究
- docker安装elasticsearch教程
- (Java)输入一个字母,若是小写字母,则变为大写输出,否则,原样输出
- 渝粤题库 国家开放大学 学前儿童语言教育 期末考试复习资料
- Tomcat使用startup.bat启动闪退的原因
热门文章
- 【Android命令行】jarsigner参数详解
- Docker常见命令
- ionic platform add ios, Error:spawn EACCES
- 小程序新能力微信扫码直接跳转小程序
- HDU 6351 (Beautiful Now) 2018 Multi-University Training Contest 5
- JAVA入门[14]-Spring MVC AOP
- head标签中到底可以放什么?
- ------更快的搜索储存结构-----平衡二叉树-----------------
- C#和C++中的float类型
- 查询sql 语句的好坏