zoukankan      html  css  js  c++  java
  • python学习笔记之--__new__方法和__init__方法

    __new__和__init__的主要区别在于

    __new__是用来创造一个类的实例的(constructor),而__init__是用来初始化一个实例的(initializer)

     构造方法包括创建对象和初始化对象,在python当中,分为两步执行:先执行__new__方法,然后执行__init__方法;

    • __init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。是一个实例方法
    • __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法

    也就是,__new__在__init__之前被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,然后__init__给这个实例设置一些参数。

    在研究具体的实现之前,我们应该知道 __new__ 方法只接受 cls 作为它的第一个参数,而 __init__ 一个参数是 self (__new__ 是一个类方法,而__init__ 是一个对象方法)。

    因为我们调用 __new__ 之前连实例都还没有,因此那时根本没有 self 的存在。__init__ 在 使用 __new__ 创建并返回一个实例之后调用,因此可将返回的实例通过self传递给它。

    class newStyleClass(object):
    
        def __init__(self):
            print("__init__ is called")
            print("self is:",self)
        
        def __new__(cls):
            print("__new__ is called")
            return super(newStyleClass, cls).__new__(cls)
    
    
    
    newStyleClass()

    F:PyCharmpypojectlearnvenvScriptspython.exe E:/pytest/202001/a0121.py
    __new__ is called
    __init__ is called
    self is: <__main__.newStyleClass object at 0x000002120D56FCC0>

    创建类实例并初始化的过程中__new__和__init__被调用的顺序也能从上面代码的输出结果中看出:__new__函数首先被调用,构造了一个newStyleClass的实例,接着__init__函数在__new__函数返回一个实例的时候被调用,并且这个实例作为self参数被传入了__init__函数。

  • 相关阅读:
    查看MySQL数据库表的命令介绍
    MySQL 数据库常用命令 超级实用版分享
    从cmd中进入MySQL的命令界面
    POJ-1664 放苹果
    ant常用命令
    ant来历
    ant
    ant有什么用
    ANT的安装和配置(windows)
    Experimental Educational Round: VolBIT Formulas Blitz B
  • 原文地址:https://www.cnblogs.com/wenm1128/p/12222287.html
Copyright © 2011-2022 走看看