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 instance

    def __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 instance

    def __init__(self):
        print("音乐播放器初始化")


# 创建对象
player = MusicPlayer()  # 创建对象,分配空间

# 打印对象地址
print(player)  # None

你可能感兴趣的:(python,开发语言)