1. __new__
  1. # __new__
  2. # object.__new__()
  3.  
  4. class A :
  5. def __init__(self):
  6. self.x = 1
  7. print("init执行啦")
  8. def __new__(cls, *args, **kwargs):
  9. print("new执行啦")
  10. return object.__new__(A,*args,**kwargs) # __new__ 是不能自己创建对象的,因此他只能用object类中的__new__来创建一个实例化
  11.  
  12. a = A()
  13. # 执行结果:
  14. # new执行啦 # 先执行的是 new
  15. # init执行啦
  16.  
  17. # new 是比 init 还要现执行。
  18. # new的参数是cls 不是 self,
  19. # init 创建self,但是new 比self 还要先执行,因此new执行的时候没有self,只有cls
  20. # cls 表示上一层,即这个类本身
  21. # __new__ 是不能自己创建对象的,因此他只能用object类中的__new__来创建一个实例化
  1. 设计模式 23
    单例模式 一个类始终只有一个实例
    当你第一次实例化这个类的时候就创建一个实例化对象
    当你之后实例化的时候就用之前的创建的对象,相当于所有的操作对象就那一个
  1. class A :
  2. __instance = False              # 定义一个私有的变量,只能内部的去拿
  3. def __init__(self,name,age):
  4. self.name = name
  5. self.age = age
  6. def __new__(cls, *args, **kwargs):
  7. if cls.__instance:             # 第一次循环外部拿不到自然就是 Fales
  8. return cls.__instance
  9. else:cls.__instance = object.__new__(A) # 借助object类创建的实例并赋值
  10. # 第一次创建的变量一定是fales的
  11. # 返回一个借助object类创建的实例并赋值,
  12. # 所创建的这个实例是什么都没有的,没有self的属性,只是开辟了一段空的内存地址给他用
  13. # 之后在调用init 根据你的参数赋值属性添加内存
  14. # __instance是保存在类里面的静态变量
  15. # 以后每次进来都是使用cls.__instance 作为实例了
  16. return cls.__instance         # 返回一个全局的变量
  17. suyang = A("sbb",2)
  18. suyang.cloth = "none"
  19. sb = A("suyang",2) # 在创建示例会覆盖之前的实例的属性,但是两个示例都是存在的
  20. print(sb) # <__main__.A object at 0x000000000255D208>
  21. print(suyang) # <__main__.A object at 0x000000000255D208>
  22. print(suyang.name) # suyang
  23. print(sb.name) # suyang # name 和age 都会被下一次实例化的时候被新值锁覆盖
  24. print(suyang.cloth) # none # 尽管使用一个内存地址但是cloth 的属性没有被覆盖,而且保存在地址里面也不会被清除
  25. print(sb.cloth) # none # sb示例并没有创建 cloth 属性,但是依然可以调用出来之前 suyang 示例的属性 ,即继承了之前的属性
  26.  
  27. sb.hobby = "sb"
  28. print(suyang.hobby) # sb # 相同的没有创建 hobby 的 suyang 示例 也可以继承之后的 sb 创建的 hobby 属性

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

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

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

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

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

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

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

  4. exec , 元类,__new__, __call__ , 单例模式 , 异常

    1,类也是对象 ''' 动态语言 可以在运行期间 动态生成类 修改对象属性 静态语言 ''''' ''' type(object_or_name, bases, dict) type(object) ...

  5. python 内建函数__new__的单例模式

    今天好奇__init__和__new__的区别是什么? 我了解到: __init__:只是单纯的返回一个类对象的实例,是在__new__之后调用的 __new__:创建一个类对象实例, class S ...

  6. Django_基于模块的单例模式

    基于模块的单例模式  原理: Python 的独有特性 : 模块的导入只能生效一次. 再重复导入只要基于一套环境都是使用的 最初 的那份资源.  示例: 文档结构: # mysingleton.py ...

  7. Python 面向对象编程的一些特征 及 单例模式的实现, 父类方法的调用(python2/python3)

    一.面向对象编程几个特征(封装, 继承,多态) 1.封装:类里面封装函数和变量, 在将类进行实例化成实例对象时进行传参, 从而生成不同的实例对象,增加代码的复用. 2.继承:子类可以继承父类的方法和属 ...

  8. Python学习笔记:单例模式

    单例模式:一个类无论实例化多少次,返回的都是同一个实例,例如:a1=A(), a2=A(), a3=A(),a1.a2和a3其实都是同一个对象,即print(a1 is a2)和print(a2 is ...

  9. Python的程序结构[1] -> 方法/Method[2] -> 魔术方法 __init__ / __del__ / __new__

    魔术方法 / Magic Method 魔法方法就是可以给你的类增加魔力的特殊方法(实质应称为特殊方法,魔术方法在JavaScript中有所体现,对象具有不透明特性,而且无法在自定义对象中模拟这些行为 ...

随机推荐

  1. 9-51单片机ESP8266学习-AT指令(单片机采集温湿度数据通过8266发送给AndroidTCP客户端显示)

    http://www.cnblogs.com/yangfengwu/p/8798512.html 补充:今天答应了一个朋友写一下如果单片机发过的是字符串应该怎么解析,答应了今天写,哦哦哦是明天了,闲话 ...

  2. 序号生成算法odoo

    def get_sum_seq(self, cr, uid, ids, name, args=None, context=None): if not ids: return {} result={} ...

  3. 扩展 WPF 动画类

    原文:扩展 WPF 动画类 扩展 WPF 动画类                                                                     Charles ...

  4. 【转】Raft 为什么是更易理解的分布式一致性算法

    编者按:这是看过的Raft算法博客中比较通俗的一篇了,讲解问题的角度比较新奇,图文并茂,值得一看.原文链接:Raft 为什么是更易理解的分布式一致性算法 一致性问题可以算是分布式领域的一个圣殿级问题了 ...

  5. 安卓自动化测试案例(跑在MonkeyRunner上)

    首先文件所在目录: MonkeyRunner所在目录: 运行命令(通过cd 命令  进入Tools目录下): 运行脚本:monkeyrunner.bat ..\honeywell\jsq.py 源文件 ...

  6. ElasticSearch5.5.1插件分类

    ElasticSearch5.5.1插件分类 附官网介绍:https://www.elastic.co/guide/en/elasticsearch/plugins/5.5/intro.html 一. ...

  7. Zabbix实战-简易教程--DB类--ClickHouse

    一.ClickHouse介绍 Clickhouse是一个用于联机分析处理(OLAP)的列式数据库管理系统(columnar DBMS). 传统数据库在数据大小比较小,索引大小适合内存,数据缓存命中率足 ...

  8. Socket入门笔记 用TcpClient实现一个简易聊天室

    效果 实现思路 使用TcpListener建一个服务器,接收所有客户端发送的消息,然后由服务器再发送到其他客户端 客户端使用TcpClient,发消息给服务器,接收服务器的消息,不和其他客户端直接交互 ...

  9. C语言----数据类型(基础篇一)

    C语言的入门程序模板 #include <stdio.h> /*使用或者包含系统里面的程序*/ main() /*程序入口点*/ { /*起点*/ +; /*叫计算机执行的指令*/ } / ...

  10. linux-流程控制语言

    if: for: 增强for循环 while: 统计这个目录下所有文件的大小 编写脚本 执行 help text: