zoukankan      html  css  js  c++  java
  • python之__new__方法

    使用类名()创建对象时,python解释器会调用__new__方法来为对象分配空间。__new__是一个由object基类提供的内置静态方法,主要作用有两个:

    (1)在内存中为对象分配空间

    (2)返回对象的引用

    python的解释器在获得对象的引用之后,将引用作为第一个参数,传递给__intit__方法。

    重写__new__方法的代码非常固定:重写__new__方法一定要return super().__new__(cls),否则python解释器会得不到分配了空间的对象引用,就不会调用对象的初始化方法。

    class MusicPlayer:
        def __new__(cls, *args, **kwargs):
            print("创建对象,分配空间")
    
        def __init__(self):
            print("播放器初始化")
    player = MusicPlayer()
    print(player)

    输出:

    需要返回  return super().__new__(cls)

    python所有类都有一个基类object,在object中默认的__new__方法已经封装了为对象分配空间的动作。

    class MusicPlayer(object):
        def __new__(cls, *args, **kwargs):
            print("创建对象,分配空间")
            instance = super().__new__(cls)
            return instance
    
        def __init__(self):
            print("播放器初始化")
    player = MusicPlayer()
    print(player)

    输出:

  • 相关阅读:
    转 Java高级程序员面试题
    发个说说0.0
    SpringMvc和servlet对比
    java面试数据类型
    java面试 关键字
    Ajax与传统Web开发的区别
    ssm框架常见问题
    浅谈C++多态性
    [转载]构造函数、析构函数可否声明为虚函数
    为什么不要在构造函数和析构函数中调用虚函数?
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12144914.html
Copyright © 2011-2022 走看看