zoukankan      html  css  js  c++  java
  • __new__与__init__

    1.构造方法包括创建对象和初始化对象,在python当中,分为两步执行:先执行__new__方法,然后执行__init__方法;
    2.__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。
    3.__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。
    总结:也就是,__new__在__init__之前被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,然后__init__给这个实例设置一些参数。

    例如:

    class A:

        def __init__(self):

            print(self)

            print("self id :",id(self))

            print("in __init__")

        def __new__(cls, *args, **kwargs):

            print("cls id",id(cls))

            print("in __new__")

            ret = object.__new__(cls)

            print(ret)

            print("ret id: ",id(ret))

            return ret

    print("A id",id(A))

    aa = A()

    结果:

    A id 2325495978840

    cls id 2325495978840

    in __new__

    <__main__.A object at 0x0000021D726FCA20>

    ret id:  2325497236000

    <__main__.A object at 0x0000021D726FCA20>

    self id : 2325497236000

    in __init__

  • 相关阅读:
    [LeetCode]Binary Tree Inorder Traversal
    [LeetCode]Binary Tree Preorder Traversal
    [LeetCode]Number of 1 Bits
    [LeetCode]Best Time to Buy and Sell Stock IV
    第四章 线程
    第三章 进程描述和控制
    第二章 操作系统概述
    第一章 计算机系统概述
    Qt创建对话框的三种方法
    strdup函数
  • 原文地址:https://www.cnblogs.com/wenshu/p/12323885.html
Copyright © 2011-2022 走看看