Python 总结之单例模式

编程入门 行业动态 更新时间:2024-10-26 21:21:53

Python 总结之单例<a href=https://www.elefans.com/category/jswz/34/1771241.html style=模式"/>

Python 总结之单例模式

单例模式

1.什么是单例模式
确保一个类只有一个实例对象。
2.为什么用单例模式
在日常电脑使用中,往往会用到任务管理器,回收站等等,这些程序在操作系统中就是唯一的。这样就不会让系统中出现多个相同程序导致内存资源的浪费。

实现单例模式的几种方式

1.使用模块
其实,Python 的模块就是天然的单例模式,因为模块在第一次导入时,会生成 .pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。如果我们真的想要一个单例类,可以考虑这样做:

mysingleton.py

class Singleton(object):def foo(self):pass
singleton = Singleton()

将上面的代码保存在文件 mysingleton.py 中,要使用时,直接在其他文件中导入此文件中的对象,这个对象即是单例模式的对象

from mysingleton import singleton

2.基于new方法实现(推荐)
我们知道,当我们实例化一个对象时,是先执行了类的new方法(我们没写时,默认调用object.new),实例化对象;然后再执行类的init方法,对这个对象进行初始化,所以我们可以基于这个,实现单例模式

class Singleton(object):__instance = None  # 设置一个类属性(只创建一个对象)is_first_run = True  # 设置一个类属性(只初始化一次)def __new__(cls, age):if not cls.__instance:   # 这里对象还没创建所以是cls调用cls.__instance = object.__new__(cls)return cls.__instancedef __init__(self, age):if self.is_first_run:self.age = ageself.is_first_run = False  # 这里new创建了对象,所以用selfa = Singleton(18)
b = Singleton(20)
print(id(a))
print(id(b))
print(b.age)
print(a.age)

打印结果如下:

140063755106960
140063755106960
18
18

更多推荐

Python 总结之单例模式

本文发布于:2023-07-28 18:08:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1270685.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模式   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!