当前位置: 首页 > news >正文

Python基础篇(16):python中__new__方法

一、__new__方法的定义

__new__() 方法是一种负责创建 类实例静态方法

二、__new__方法的作用

  • 在内存中为对象分配空间
  • 返回对象的引用

三、__new__方法的使用

  1. 创建对象时自动调用__new__方法,并且是在__init__初始化方法之前被调用
  2. Python解释器获得对象的引用后,将引用作为第一个参数,传递给__init__方法

四、重写__new__方法

  • 重写__new__方法,一定要 return super().__new__(cls)
  • 否则python解释器得不到分配了空间的对象引用,就不会调用init方法
  • 注意:__new__是一个静态方法,在调用时需要主动传递 cls 参数

五、new方法总结

1、Python 中的构造方法 __init__() 负责将类实例化,而在 __init__() 执行之前,__new__() 负责制造这样的一个实例对象,以便 __init__() 去让该实例对象更加的丰富

# 创建一个音乐播放器类
class MusicPlayer:"""当调用new方法之后,需要在当前new方法中调用父类new方法object父类new方法已经实现了划分内存地址的代码在内存中并没有划分空间给当前类"""# 重写new方法,为对象分配空间def __new__(cls, *args, **kwargs):print("创建对象,分配空间")# 使用super继承object对象的方法instance = super().__new__(cls)return instancedef __init__(self):print("音乐播放器初始化")# 创建对象
player = MusicPlayer()  # 创建对象,分配空间     音乐播放器初始化# 打印对象地址
print(player)  # 输出具体的对象地址

2、__new__() 方法还决定是否要使用该 __init__() 方法

# 创建一个音乐播放器类
class MusicPlayer:"""当调用new方法之后,需要在当前new方法中调用父类new方法object父类new方法已经实现了划分内存地址的代码在内存中并没有划分空间给当前类"""# 重写new方法,为对象分配空间def __new__(cls, *args, **kwargs):print("创建对象,分配空间")# # 使用super继承object对象的方法# instance = super().__new__(cls)# return instancedef __init__(self):print("音乐播放器初始化")# 创建对象
player = MusicPlayer()  # 创建对象,分配空间# 打印对象地址
print(player)  # None

http://www.lryc.cn/news/149254.html

相关文章:

  • linux并发服务器 —— 文件IO相关函数(三)
  • matlab使用教程(27)—微分代数方程(DAE)求解
  • vue3组合式api <script setup> props 父子组件的写法
  • Compose - 自定义作用域限制函数
  • 【Flutter】Flutter 使用 photo_view 实现图片查看器
  • 电脑组装教程分享!
  • 【云原生之Docker实战】使用Docker部署flatnotes笔记工具
  • XSSchallenge1-20
  • centos 7的超详细安装教程
  • 代码随想录算法训练营第五十二天 | 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组
  • 计算机图形软件(三)6-6 小结
  • Flink常用函数
  • stable diffusion实践操作-embedding(TEXTUAL INVERSION)
  • 代码随想录二刷day03
  • 初出茅庐的小李博客之STM32F103C8T6音乐控制器实战教程【1】
  • 苍穹外卖01-项目概述、环境搭建
  • 图床项目进度(二)——动态酷炫首页
  • Java“魂牵”京东商品详情描述数据,京东商品详情API接口,京东API接口申请指南
  • Flink SQL你用了吗?
  • 【位运算】leetcode面试题:消失的两个数字
  • Vue2 集成 CodeMirror 实现公式编辑、块状文本编辑,TAG标签功能
  • CCF-CSP 30次 第二题【矩阵运算】
  • 最大子数组和【贪心算法】
  • linux并发服务器 —— Makefile与GDB调试(二)
  • Ansible学习笔记14
  • docker 安装 mysql 并挂载 配置文件和数据目录
  • 代码随想录训练营 DP01
  • github+hexo 博客搭建
  • Spring Security bug记录:antMatchers找不到符号(已解决)
  • kaggle新赛:谷歌AI模型运行时间预测赛题解析【数据挖掘】