博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day30 __new__ 以及单例模式
阅读量:6192 次
发布时间:2019-06-21

本文共 2010 字,大约阅读时间需要 6 分钟。

__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执行啦        # 先执行的是 new15     # init执行啦16 17 # new 是比 init 还要现执行。18 # new的参数是cls 不是 self,19 # init 创建self,但是new 比self 还要先执行,因此new执行的时候没有self,只有cls20 # cls 表示上一层,即这个类本身21 # __new__ 是不能自己创建对象的,因此他只能用object类中的__new__来创建一个实例化
设计模式    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)    # suyang23 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 属性

 

转载于:https://www.cnblogs.com/shijieli/p/9939298.html

你可能感兴趣的文章
Linux对文件归档和压缩(学习笔记八)
查看>>
launch文件概述---1
查看>>
WPF下载远程文件,并显示进度条和百分比
查看>>
实现app上对csdn的文章查看,以及文章中图片的保存 (制作csdn app 完结篇)
查看>>
Linq动态条件
查看>>
大圣归来:我们心中缺少一份英雄主义
查看>>
IIS配置错误信息输出
查看>>
excel使用技巧
查看>>
Flymeos插桩适配教程
查看>>
MySQL备份 博客---MYSQLDBA 黄杉
查看>>
Mysql 修改数据库,mysql修改表类型,Mysql增加表字段,Mysql删除表字段,Mysql修改字段名,Mysql修改字段排列顺序,Mysql修改表名...
查看>>
GuozhongCrawler系列教程 (1) 三大PageDownloader
查看>>
《JavaScript高级程序设计》笔记:引用类型(五)
查看>>
开放产品开发(OPD):OPD框架
查看>>
Ubuntu 14.04下单节点Ceph安装(by quqi99)
查看>>
java uuid第一次性能
查看>>
[Python] Handle Exceptions to prevent crashes in Python
查看>>
Linux鸟哥(总)
查看>>
centos虚拟机安装,配置静态ip可以访问网络
查看>>
Centos Crontab查看状态和开启
查看>>