单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某
一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就
能派上用场。
单例类:如果一个类,从头到尾只开辟了一块属于对象的空间,那么这个类就是一个单例类。 准备工作:
----#__init__()方法叫初始化方法
----#__new__()方法叫构造方法 例子:
<1>
class A:
def __new__(cls, *args, **kwargs):
print('new')
def __init__(self):
print('init')
a = A()
结果:new <2>
class A:
def __new__(cls, *args, **kwargs):
print('new')
obj = super().__new__(cls)
return obj
def __init__(self):
print('init')
a = A()
结果:new
init 需要知道,我们实例化对象的时候,会有三个步骤:
1.开辟一个空间,给对象
2.把对象的空间传给self,并执行init方法
3.将这个对象的空间返回给调用者 第一步的开辟一个空间就是构造函数 __new__()来完成的。
第二步,将对象空间传给self,我们从例子<1>可以看出,
不返回空间,self是不会收到的,所以我们给出了例子<2>
这样第二步就执行了。
第三步,我们将对象的空间返回给调用者。 __new__()方法在什么时候执行?
答:在实例化之后,__init__()之前,先执行 __new__()来创建一块空间 了解这些,我们就开始写一个单例类:
单例类:如果一个类,从头到尾只开辟了一块属于对象的空间,那么这个类就是一个单例类。 例子:
<1>
class Single:
__INSTANCE = None def __new__(cls, *args, **kwargs):
if not cls.__INSTANCE:
cls.__INSTANCE = super().__new__(cls)
return cls.__INSTANCE s0 = Single()
s1 = Single()
print(s0)
print(s1)
结果:
<__main__.Single object at 0x10e7f0630>
<__main__.Single object at 0x10e7f0630> <2>
class Foo:
__INSTANCE = None @classmethod
def get_instance(cls):
if cls.__INSTANCE:
return cls.__INSTANCE
else:
cls.__INSTANCE = Foo()
return cls.__INSTANCE
f0 = Foo()
f1 = Foo()
print(f0.get_instance())
print(f1.get_instance())
结果:
<__main__.Foo object at 0x10f4354e0>
<__main__.Foo object at 0x10f4354e0>

Python面向对象之单例模式的更多相关文章

  1. python面向对象(二)——类成员

    Python面向对象    类成员 1.字段         普通字段    属于对象         静态字段    属于类   2.方法 普通方法   触发者是对象    括号里至少一个参数 se ...

  2. python面向对象进阶

    前言 上节大话python面向对象对面向对象有了一些了解,这次就不用大话风格了 (ps:真心不好扯啊) isinstance与issubclass isinstance(obj,cls)检查是否obj ...

  3. python 面向对象高级应用(三)

    目录: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__getattr__ 二次加工标准类型(包装) __ ...

  4. Python面向对象总结及类与正则表达式

    Python3 面向对象 一丶面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 方法:类中定义的函数. 类变 ...

  5. Python面向对象之反射,双下方法

    一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...

  6. python 面向对象初级篇

    Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...

  7. Python 面向对象 基础

    编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...

  8. python面向对象进阶(八)

    上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  9. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

随机推荐

  1. Spring Boot2.0之整合事物管理

    首先Spring 事务分类 1.声明事务  原理:基于编程事务的 2.编程事务  指定范围 扫包去解决 3.事务原理:AOP技术   通过环绕通知进行了拦截 使用Spring 事务注意事项: 不要tr ...

  2. CSS样式命名整理

    CSS样式命名整理 页面结构 容器: container/wrap 整体宽度:wrapper 页头:header 内容:content 页面主体:main 页尾:footer 导航:nav 侧栏:si ...

  3. openfire开发环境(3.9.1)

    1.解压源码 2.把build/eclipse中的文件cp到源码跟目录,并修改文件名,前面增加"."号,变成eclipse工程. 3.导入eclipse, 把build/lib/, ...

  4. L90

    On Motes and Beams 微尘与栋梁 It is curious that our own offenses should seem so much less heinous than t ...

  5. listen 62

    The Hangover I'm never drinking again. And this time I mean it! Anyone who's suffered through a bad ...

  6. 动态创建TeeChart的简便方法

    最近在项目中使用Teechart ocx版本替换了labview的老版本控件,显示效果和效率均有提高,但是却遇到多线程下报access violation的问题. 翻遍大小论坛,最后在官网论坛找到相同 ...

  7. linux命令学习笔记(27):linux chmod命令

    chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法.一种是 包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设定法. Linux系统中的 ...

  8. APIO2018爆零记

    Day1 集合 7点和yyc他们在学校简单的集合了一下 在大通道看到了整个年级来上操 嘲讽了一番就大摇大摆的走出了校门 校门口看无迟到周的权益部长lzj同学满眼的羡慕 2333 然后到了裕龙酒店登记入 ...

  9. 第十二章: 部署Django

    本章包含创建一个django程序最必不可少的步骤 在服务器上部署它 如果你一直跟着我们的例子做,你可能正在用runserver 但是runserver 要部署你的django程序,你需要挂接到工业用的 ...

  10. pytorch------cpu与gpu load时相互转化 torch.load(map_location=)

    将gpu改为cpu时,遇到一个报错: RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is ...