__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 属性

最新文章

  1. Redis+Django(Session,Cookie)的用户系统
  2. 低功耗蓝牙4.0BLE编程-nrf51822开发(2)
  3. 【算法题目】包含min函数的栈
  4. Java NIO读书笔记
  5. jquery css 简单笔记
  6. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程04:技能的输入与检测》
  7. Java 输入
  8. V - stl 的 优先队列 Ⅱ
  9. Bootstrap 布局
  10. .NET Core 2.0 Preview2 发布汇总
  11. 图表相同数据会自动合并问题(finereport)
  12. Windows下文件夹扩展名
  13. SkylineGlobe 6.6 开放的事件函数接口
  14. 全网最详细的启动或格式化zkfc时出现java.net.NoRouteToHostException: No route to host ... Will not attempt to authenticate using SASL (unknown error)错误的解决办法(图文详解)
  15. MyCat分库分表入门
  16. ios中键盘处理源码
  17. MySql中4种批量更新的方法
  18. java中package import区别
  19. MySQL中视图和普通表的区别
  20. POJ3696 The Luckiest number

热门文章

  1. os模块和shutil模块
  2. 《MySQL必知必会》[06] 触发器
  3. Apache Beam: 下一代的大数据处理标准
  4. 快速排序的php实现
  5. CF875F Royal Questions 基环树、Kruskal
  6. mysql 添加字段,未响应
  7. java内存模型与volatile变量与Atomic的compareAndSet
  8. linux journalctl 命令
  9. ABAQUS粘弹性边界及地震荷载施加的简单实现(Matlab生成input文件)
  10. wordcount程序