python 魔术方法__new__方法及单例模式

PYhton 当中的__new__ :

__new__方法:其实就是创建对象的方法,
1.在内存中为实例对象分配空间
2.返回对象的引用给 Python 解释器
__new__方法始终都是类的静态方法,即使没有被加上静态方法装饰器在当前的子类当中如果没有定义new的方法,默认去调用父类
boj中的new方法
创建一个对象

例:__ new__方法使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
class Test(object):
 
    def __init__(self):
        print("当前是一个init的方法")
 
    def __new__(cls, *args, **kwargs):
 
        return 11
 
a = Test()
b = Test()
print(a,b) # #实例化对象是谁取决于__new__方法,__new__返回什么就是什么
# 输出 结果 11 11

  

单例模式:

目的:让某一个类创建的实例对象,在整个应用程序中只有唯一的一个
实例对象而且该对象易于外界访问,从而方便对实例个数的控制并节约
系统资源每一次执行 类名() 返回的对象,内存地址是相同的

单例模式的优点:

1、由于单例模式要求在全局内只有一个实例,因而可以节省比较多的内存空间;
2、全局只有一个接入点,可以更好地进行数据同步控制,避免多重占用;
3、单例可长驻内存,减少系统开销。

单例模式的应用举例:
1、生成全局惟一的序列号;
2、访问全局复用的惟一资源,如磁盘、总线等;
3、单个对象占用的资源过多,如数据库等;

缺点
1、单例模式的扩展是比较困难的;
2、赋于了单例以太多的职责,某种程度上违反单一职责原则
3、单例模式是并发协作软件模块中需要最先完成的,因而其不利于测试;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Test():
 
 
     __instance = None
 
     def __new__(cls, *args, **kwargs):
         if not cls.__instance:
 
             cls.__instance = object.__new__(cls)
 
         return cls.__instance
 
 
 
a = Test()
b = Test()
print(a,b)
 
"""输出结果
<__main__.Test object at 0x01DDAE90>
<__main__.Test object at 0x01DDAE90>
"""

  

posted @   多测师-星sir  阅读(76)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示