day30 __new__ 以及单例模式
__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__ 以及单例模式的更多相关文章
- 由Python通过__new__实现单例模式,所想到的__new__和__init__方法的区别
之前通过读书,了解到在Python中可以通过__new__方法来实现单例模式,代码一个示例如下,我就有了几个疑问,什么是单例模式?__new__方法是用来做什么的?用__new__方法实现的单例模式, ...
- Python __new__ 实现单例模式 python经典面试题
话不多说,上代码 class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance' ...
- Python中使用__new__实现单例模式并解析
阅读文章前请先阅读 Python中类方法.__new__方法和__init__方法解析 单例模式是一个经典设计模式,简要的说,一个类的单例模式就是它只能被实例化一次,实例变量在第一次实例化时就已经固定 ...
- exec , 元类,__new__, __call__ , 单例模式 , 异常
1,类也是对象 ''' 动态语言 可以在运行期间 动态生成类 修改对象属性 静态语言 ''''' ''' type(object_or_name, bases, dict) type(object) ...
- python 内建函数__new__的单例模式
今天好奇__init__和__new__的区别是什么? 我了解到: __init__:只是单纯的返回一个类对象的实例,是在__new__之后调用的 __new__:创建一个类对象实例, class S ...
- Django_基于模块的单例模式
基于模块的单例模式 原理: Python 的独有特性 : 模块的导入只能生效一次. 再重复导入只要基于一套环境都是使用的 最初 的那份资源. 示例: 文档结构: # mysingleton.py ...
- Python 面向对象编程的一些特征 及 单例模式的实现, 父类方法的调用(python2/python3)
一.面向对象编程几个特征(封装, 继承,多态) 1.封装:类里面封装函数和变量, 在将类进行实例化成实例对象时进行传参, 从而生成不同的实例对象,增加代码的复用. 2.继承:子类可以继承父类的方法和属 ...
- Python学习笔记:单例模式
单例模式:一个类无论实例化多少次,返回的都是同一个实例,例如:a1=A(), a2=A(), a3=A(),a1.a2和a3其实都是同一个对象,即print(a1 is a2)和print(a2 is ...
- Python的程序结构[1] -> 方法/Method[2] -> 魔术方法 __init__ / __del__ / __new__
魔术方法 / Magic Method 魔法方法就是可以给你的类增加魔力的特殊方法(实质应称为特殊方法,魔术方法在JavaScript中有所体现,对象具有不透明特性,而且无法在自定义对象中模拟这些行为 ...
随机推荐
- 《MySQL必知必会》[06] 触发器
1.触发器 MySQL中的触发器概念,和Java中的事件监听器有点相似.当你想要某条语句在某个事件发生时自动执行,就要用到触发器了. 触发器能响应如下三类语句: DELETE INSERT UPDAT ...
- Webpack 概念
概念 webpack 是一个现代的 JavaScript 应用程序的模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构建一个依赖关系图表(dependency ...
- 重装系统之制作U盘启动盘
准备: 1.需要一个大于4G的U盘. 2.一个原版系统. 3.制作U盘启动盘的工具—ultraliso. 一.一个大于4G的U盘 制作启动盘将会格式化U盘,记得做好备份. 二.一个原版系统 至于你要装 ...
- 转:判断js中的数据类型的几种方法
判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法的异 ...
- Centos7 64位 -- glibc-2.29 编译升级方法(已成功)
某软件出现漏洞,需要升级解决(忘了哪个)结果提示glibc版本过低. 懵懂无知的我以为glibc想其他软件一样编译升级一下就好.. 结果? 重装系统! 说真的,如非必要(或学习),请勿升级 glibc ...
- C#一些常用的图片操作方法:生成文字图片 合并图片等
生成文字图片: /// <summary> /// 生成文字图片 /// </summary> /// <param name="text">& ...
- vs2017+opencv4.0.1安装配置详解(win10)
一.说明 笔者之前已经安装过了vs2017,对应的opencv是3.4.0版本的.但现在想体验下opencv4的改变之处,所以下载了最新的opencv4.0.1. vs2017的安装请自行搜索安装,本 ...
- ssh登陆服务器locale告警(-bash: warning: setlocale:)的处理方法
使用ssh远程登陆 IDC机房服务器,发现老是出现如下告警信息: -bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UT ...
- Supervisor (进程管理利器) 使用说明 - 运维笔记
一.Supervisor简单介绍supervisor是一个 Client/Server模式的系统,允许用户在类unix操作系统上监视和控制多个进程,或者可以说是多个程序.supervisor与laun ...
- 12.17 Daily Scrum
Today's Task Tomorrow's Task 丁辛 实现和菜谱相关的餐厅列表. 实现和菜谱相关的餐厅列表. 邓亚梅 美化搜索框UI. 美 ...