单例模式(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. iOS数据持久化存储之归档NSKeyedArchiver

    归档是一种很常用的文件储存方法,几乎任何类型的对象都能够被归档储存(实际上是一种文件保存的形式),收集了网上的一些资料并结合自己的一些经验,总结如下. 一.使用archiveRootObject进行简 ...

  2. matlab程序计时

    t1=datetime(); %程序 t2=datetime() totaltime=t2-t1; disp(t2-t1); 或者: tic %代码块 toc disp(['运行时间: ',num2s ...

  3. python列表推导式的if-else

    a=[i for i in range(10) if i%2==0]print(a)a=[i if i%2==0 else 'qi' for i in range(10)]print(a) 结果:[0 ...

  4. jsp和servlet的区别联系

    jsp和servlet的区别联系 简单的说,SUN首先发展出SERVLET,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML ...

  5. 1091 Acute Stroke (30)(30 分)

    One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the re ...

  6. bzoj 5093 图的价值 —— 第二类斯特林数+NTT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5093 每个点都是等价的,从点的贡献来看,得到式子: \( ans = n * \sum\li ...

  7. xpath技术,用在dom4j中

    title: xPath语法应用 tags: xPath,dom4j grammar_cjkRuby: true --- 在dom4j中,会使用到xPath技术. 在项目中导入 jaxen-1.1-b ...

  8. 缓存与数据库一致性之二:高并发下的key重建(先淘汰cache再写db)的问题

    一.为什么数据会不一致 回顾一下上一篇文章<缓存与数据库一致性之一:缓存更新设计>中对缓存.数据库进行读写操作的流程. 写流程: (1)先淘汰cache (2)再写db 读流程: (1)先 ...

  9. web.xml中<security-constraint>安全认证标签说明

      1.security-constraint元素 部署描述符中的<security-constraint>元素允许不通过编程就可以限制对某个资源的访问. <security-con ...

  10. AngularJs(Part 2)

    I am still tired to translate these into Chinese. but who cares? i write these posts just for myself ...