单例模式,使用__new__

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

 class Singleton(object):

     def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance'):
cls._instance = super(Singleton,cls).__new__(cls, *args, **kw) return cls._instance def __init__(self,name):
if not hasattr(self,'name'): ##注意此行
self.name=name def __str__(self):
return '类的名称:%s 对象的name属性是:%s hash是:%s id是:%s '%(self.__class__.__name__,self.name, self.__hash__, id(self)) x1=Singleton('xxxx')
x2=Singleton('yyyy') print id(x1)
print id(x2) print x1
print x2

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

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

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

单例模式__new__的更多相关文章

  1. Python - 面向对象编程 - __new()__ 和单例模式 

    单例模式 这是一种设计模式 设计模式是前任工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对某一特定问题的成熟的解决方案 使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性 单 ...

  2. 转--python 中写单例

    原文地址 原文地址2 Python中的单例模式的几种实现方式的及优化 阅读目录(Content) 单例模式 实现单例模式的几种方式 1.使用模块 2.使用装饰器 3.使用类 4.基于__new__方法 ...

  3. 由Python通过__new__实现单例模式,所想到的__new__和__init__方法的区别

    之前通过读书,了解到在Python中可以通过__new__方法来实现单例模式,代码一个示例如下,我就有了几个疑问,什么是单例模式?__new__方法是用来做什么的?用__new__方法实现的单例模式, ...

  4. Python __new__ 实现单例模式 python经典面试题

    话不多说,上代码 class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance' ...

  5. 新式类单例模式之 __new__()

    单例模式: 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 类中有一个静态属性__instance,默认为none,重构__new__()方法,判断__instance是否为空,若为 ...

  6. 基于 __new__ 方法的单例模式

    单例模式定义 首次实例化创建实例化对象 之后的每次实例化都用最初的实例化对象 即单实例模式 __new__ 的原理 __new__ 方法可以在 __init__ 方法执行 这样可以在初始化之前进行一系 ...

  7. day30 __new__ 以及单例模式

    __new__ # __new__ # object.__new__() class A : def __init__(self): self.x = 1 print("init执行啦&qu ...

  8. python 单例模式,一个类只能生成唯一的一个实例,重写__new__方法详解

    单例:一个类只能生成唯一的一个实例 每个类只要被实例化了,他的私有属性 '_instance'就会被赋值,这样理解对吗 对 #方法1,实现__new__方法 #并在将一个类的实例绑定到类变量_inst ...

  9. Python中使用__new__实现单例模式并解析

    阅读文章前请先阅读 Python中类方法.__new__方法和__init__方法解析 单例模式是一个经典设计模式,简要的说,一个类的单例模式就是它只能被实例化一次,实例变量在第一次实例化时就已经固定 ...

随机推荐

  1. at91sam9260 笔记1

    http://wenku.baidu.com/link?url=pK0w3c6oYX_phtiYN7PD97TivWFnwnu9yrie5b7HofmDXDVbuRciB35Izx_NGDiYz1U5 ...

  2. IIS连接数修改

    1, 对于xp等非服务器操作系统,IIS的并发数量是有限的.在xp上同时允许的连接数是10. 当程序出现性能问题时,可以通过下面的方法来查看并发连接数 这个工具在计算机管理里面可以找到 在图表区域,右 ...

  3. yum使用过程中的常见错误

    (1) 使用yum安装相关软件包时一直提示以下错误:repodata/repomd.xml: [Errno 4] IOError: <urlopen error (113>, Error: ...

  4. 判断Json字符串返回类型 对象 或者 数组

    public enum JSON_TYPE { /** * JSONObject */ JSON_TYPE_OBJECT, /** * JSONArray */ JSON_TYPE_ARRAY, /* ...

  5. 微信小程序——页面中调用组件方法

    我现在有一个弹层的组件(popup),组件里面定义了显示组件(showPopup)和隐藏组件(hidePopup)的方法. 我们如何在调用组件的页面中调用组件里面的方法呢? 在调用组件的页面写如下代码 ...

  6. jquery miniui 学习笔记

    1.取组件值 传递form data,load发送 请求加载数据 <script type="text/JavaScript">  mini.parse();  // ...

  7. Python 字符串操作函数二

    #-*- coding:utf-8 -*- line = "l want watch movie with you ." print(line.center(50)) print( ...

  8. 关于Struts2开发过程中遇到的问题和解决方案

    1.表的名字不要取关键字一样,不要取User这种的 2.java判断字符串相等用.equals,不能用== 3.<s:textfield name="caiuser.uphone&qu ...

  9. model ,orm,dao,service,持久层 ,mvc 这些名词在java中的概念?

    这些概念不针对某个特定的编程语言. view层:结合control层,显示前台页面. control层:业务模块流程控制,调用service层接口. service层:业务操作实现类,调用dao层接口 ...

  10. Unity----Scene加载问题

    Unity官方提供了4种加载场景(scene)的方法,分别是: 1. Application.LoadLevel():同步加载 2. Application.LoadLevelAsync():异步加载 ...