数据结构|单例类

栏目: 后端 · 发布时间: 7年前

内容简介:本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。要知道什么是单例类,首先就得清楚什么是单例模式。单例模式,是一种简单的常用软件设计模式,在程序运行中有且只有一个实例。既应用该模式的一个类只能有一个对象实类,这种类称为单例类。

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

要知道什么是单例类,首先就得清楚什么是单例模式。单例模式,是一种简单的常用软件设计模式,在程序运行中有且只有一个实例。既应用该模式的一个类只能有一个对象实类,这种类称为单例类。

网上的大多数解释都比较繁琐、复杂。这里小编通过自己理解尽量通俗、简单的向大家介绍单例类。

先写一个简单的类,来观察实例化对象是否只有一个。

class Test:
    
pass
 
 
a=Test()
 
print ( id (a))
 b=Test()
 
print ( id (b))

-------------------------------------------------------------------------------

返回

1169738445096

1169739284664

通过打印这两个实例的的内存地址,知道该类创建了两个实例,每次实例化一个对象都会在内存中重新分配一块空间,这样就会导致资源浪费,为了解决这个问题,要让一个类所实例对象都指向同一块内存空间,既单例类。

单例类实现

Python 中,类创建实例对象是通过父类 object _new_(cls) 方法来实现的。我们可以通过重写这个方法来实现。

class Sinleton(object):

_judge =
None # 定义一个类属性用于判断

def __new__(cls):



if cls._judge==None:

#如果—_judge为空,则是第一次创建实例

#那就通过父类的_new_(cls)创建

cls._judge=object.__new__(cls)

return cls._judge

else:

#不是第一次创建,返回上一个对象的引用

return cls._judge



obj1=Sinleton()

obj2=Sinleton()

print(id(obj1))

print(id(obj2))

返回

2212148678952

2212148678952  # 相同引用地址

除了重写 _new_(cls) 方法外,实现单例类的方法有很多,诸如文件导入、装饰器、 _metaclass_ 元类等等。

其中比较容易理解和运用的就是重写 _new_(cls) 方法以及文件导入形式。

将类在某个文件中实例化,并赋值给某个变量。通过该文件引用实例,观察打印的地址相同。

class Sinleton(object):

pass
k=Sinleton()

from Singletons import k as obj1

print(id(obj1))

from Singletons import k as obj2

print(id(obj2))

# 返回引用地址易相同

END

主  编   |   张祯悦

责  编   |   马原涛

where2 go 团队

   

微信号:算法与编程之美          

数据结构|单例类

长按识别二维码关注我们!

温馨提示: 点击页面右下角 “写留言”发表评论,期待您的参与!期待您的转发!


以上所述就是小编给大家介绍的《数据结构|单例类》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTTP Essentials

HTTP Essentials

Stephen A. Thomas、Stephen Thomas / Wiley / 2001-03-08 / USD 34.99

The first complete reference guide to the essential Web protocol As applications and services converge and Web technologies not only assume HTTP but require developers to manipulate it, it is be......一起来看看 《HTTP Essentials》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具