博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python面向对象之单例模式
阅读量:5313 次
发布时间:2019-06-14

本文共 1550 字,大约阅读时间需要 5 分钟。

单例模式(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.__INSTANCEs0 = 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.__INSTANCEf0 = Foo()f1 = Foo()print(f0.get_instance())print(f1.get_instance())结果:    <__main__.Foo object at 0x10f4354e0>    <__main__.Foo object at 0x10f4354e0>

转载于:https://www.cnblogs.com/caodneg7/p/9392920.html

你可能感兴趣的文章
MTK笔记
查看>>
ERROR: duplicate key value violates unique constraint "xxx"
查看>>
激活office 365 的启动文件
查看>>
无法根据中文查找
查看>>
[简讯]phpMyAdmin项目已迁移至GitHub
查看>>
转载 python多重继承C3算法
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
css文本溢出显示省略号
查看>>
git安装和简单配置
查看>>
面向对象:反射,双下方法
查看>>
鼠标悬停提示文本消息最简单的做法
查看>>
Java面向对象重要关键字
查看>>
课后作业-阅读任务-阅读提问-2
查看>>
面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序...
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
Awesome Adb——一份超全超详细的 ADB 用法大全
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
Android 将drawable下的图片转换成bitmap、Drawable
查看>>
介绍Win7 win8 上Java环境的配置
查看>>
移动、联通和电信,哪家的宽带好,看完你就知道该怎么选了!
查看>>