单例模式__new__

单例模式,使用__new__

__new__是构造函数, __init__是初始化方法,先调用了__new__返回了实例,__init__给这个实例初始化绑定一些属性。

 

复制代码
 1 class Singleton(object):
 2 
 3     def __new__(cls, *args, **kw):
 4         if not hasattr(cls, '_instance'):
 5             cls._instance = super(Singleton,cls).__new__(cls, *args, **kw)    
 6         
 7         return  cls._instance
 8    
 9     def __init__(self,name):
10         if not hasattr(self,'name'):      ##注意此行
11             self.name=name
12     
13     def __str__(self):
14         return '类的名称:%s 对象的name属性是:%s hash是:%s id是:%s '%(self.__class__.__name__,self.name, self.__hash__, id(self))
15     
16 x1=Singleton('xxxx')
17 x2=Singleton('yyyy')
18 
19 print id(x1)
20 print id(x2)
21 
22 print x1
23 print x2
复制代码

 

 

观察结果可以发现,x1的name值是xxxx,x2的name的值也是xxxx。

如果去掉第10行,那么x1和x2的name的值都是yyyy。

 

在某些情况下需要控制某些属性不被重新赋值,就可以加入判断。特别是selenium webdriver的。

 

posted @   北风之神0509  阅读(188)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示