Python基础篇(16):python中__new__方法
一、__new__方法的定义
__new__()
方法是一种负责创建 类实例 的 静态方法
二、__new__方法的作用
- 在内存中为对象分配空间
- 返回对象的引用
三、__new__方法的使用
- 创建对象时自动调用__new__方法,并且是在__init__初始化方法之前被调用
- 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