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

    本文摘自木宛城主的 ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇 - 木宛城主 - 博客园 由于ASP.NET Membership.ASP.NET Simple ...

  2. BZOJ4856 JSOI2016 病毒感染 区间DP

    传送门 原Word文档 题意:太长不给 这种题目一看就是区间DP 设$f_i$表示治愈了前$i$个村子的时候最少死了多少村民,又设前缀和为$sum_i$,通过枚举折返时最后经过的村子$j$,并且提前计 ...

  3. git log 的常用选项

  4. VB6 加密解密字符串

    Public Function EnCodeStr(ByVal password As String) As String Dim il_bit, il_x, il_y, il_z, il_len, ...

  5. 【转】单KEY业务,数据库水平切分架构实践

    本文将以“用户中心”为例,介绍“单KEY”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践: 如何来实施水平切分 水平切分后常见的问题 典型问题的优化思路及实践 一.用户 ...

  6. zookeepeer4字命令实践

    环境 leader:192.168.116.143 fllower:192.168.116.142 fllower:192.168.116.144 命令:conf——查看其他主机的配置文件 [root ...

  7. Task 异步编程测试案例及基础应用说明

    对于多线程,我们经常使用的是Thread.在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于“任务的编程模型”所冲击,因为tas ...

  8. [Spark][Python]Wordcount 例子

    [training@localhost ~]$ hdfs dfs -cat cats.txt The cat on the matThe aardvark sat on the sofa[traini ...

  9. NIO之缓冲区

    NIO引入了三个概念: Buffer 缓冲区 Channel 通道 selector 选择器 1.java.io优化建议 操作系统与Java基于流的I/O模型有些不匹配.操作系统要移动的是大块数据(缓 ...

  10. spring boot 实现密码连续输入错误5次,限制十分钟内不能进行登录

    我们要实现的就是,密码连续输入错误5次,就限制用户十分钟不能进行登录. 大致的流程图 数据库设计如下 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ...