1:__new__:它是创建对象时调用,会返回当前对象的一个实例;

__init__:它是创建对象后调用,对当前对象的一些实例初始化,无返回值

代码示例:

>>> class Data(object):
def __init__(cls):
cls.x = 2
print "init"
return cls ###在init中不可用 >>> data = Data()
init Traceback (most recent call last):
File "<pyshell#100>", line 1, in <module>
data = Data()
TypeError: __init__() should return None, not 'Data' >>> class Data(object):
def __new__(cls):
cls.x = 3
print "new"
return cls >>> data = Data()
new
>>> data.x
3

由上可见,__new__方法会返回所构造的对象,__init__则不会,__init__无返回值

2:再类中,若__new__和__init__同时存在时,先调用__new__

代码示例:

>>> class Data(object):
def __new__(self):
print "new"
def __init__(self):
print "init" >>> data = Data()
new

3:If __new__() returns an instance of cls, then the new instance’s __init__() method will be invoked like __init__(self[, ...]), where self is the new instance and the remaining arguments are the same as were passed to __new__().

如果__new__返回一个对象的实例,会隐式调用__init__

If __new__() does not return an instance of cls, then the new instance’s __init__() method will not be invoked.

如果__new__不返回一个对象的实例,__init__不会被调用

代码示例:

>>> class A(object):
def __new__(Class):
object = super(A,Class).__new__(Class)
print "in new"
return object ##返回对象的实例
def __init__(self):
print "in init" >>> A()
in new
in init
<__main__.A object at 0x0215CD70>
>>> class B(object):
def __new__(cls):
print "in new"
return cls
def __init__(self):
print "in init" >>> b=B()
in new

Python_中__init__和__new__的异同的更多相关文章

  1. Python中__init__和__new__的区别详解

    __init__ 方法是什么? 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候.例如: # -*- cod ...

  2. python中__init__()、__new__()、__call__()、__del__()几个魔法方法的用法

    关于__new__()的用法参考: http://www.myhack58.com/Article/68/2014/48183.htm 正文: 一.__new__()的用法: __new__()是在新 ...

  3. python中__init__()、__new__()、__call__()、__del__()用法

    关于__new__()的用法参考: http://www.myhack58.com/Article/68/2014/48183.htm 正文: 一.__new__()的用法: __new__()是在新 ...

  4. python中__init__和__new__的区别

    参考:https://my.oschina.net/liuyuantao/blog/747164 python中__metaclass的详解 参考:https://www.cnblogs.com/ia ...

  5. __init__和__new__的异同

    实例化类的流程: 1.p = Person(name, age)2.首先执行使用name和age参数来执行Person类的__new__方法,这个__new__方法会 返回Person类的一个实例(p ...

  6. Python中的__init__和__new__介绍

    介绍 首先我们要知道在面向对象编程中,实例化基本遵循创建实例对象.初始化实例对象.最后返回实例对象这么一个过程. Python 中的 __new__ 方法负责创建一个实例对象,__init__ 方法负 ...

  7. python中的__init__ 、__new__、__call__小结

    这篇文章主要介绍了python中的__init__ .__new__.__call__小结,需要的朋友可以参考下 1.__new__(cls, *args, **kwargs)  创建对象时调用,返回 ...

  8. 详解python中的__init__与__new__方法

    一.__init__和__new__方法执行的顺序? 在面向对象中介绍了关于对象创建的过程,我们知道__new__方法先于__init__方法执行. 二.__new__方法是什么? 首先,我们先来看下 ...

  9. Python中的__init__和__new__

    一.__init__ 方法是什么? 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候.例如: # -*- c ...

随机推荐

  1. js json 对象

    JSON 语法规则 JSON 语法是 JavaScript 对象表示法语法的子集. 数据在名称/值对中 数据由逗号分隔 大括号保存对象 中括号保存数组 JSON 名称/值对 JSON 数据的书写格式是 ...

  2. Google Chrome浏览器之删除Goolge搜索结果重定向插件Remove Google Redirects

    https://chrome.google.com/webstore/detail/remove-google-redirects/ccenmflbeofaceccfhhggbagkblihpoh?h ...

  3. ubuntu 14.04 LTS 安装webbentch压力測试工具

    近期在做 压力測试工具,除了apache的ab測试工具外,发现webbentch工具也不错,这里简介下这两个工具. 一.webbentch安装: wget http://blog.s135.com/s ...

  4. 下载与安装---tensorflow on linux

    http://wiki.jikexueyuan.com/project/tensorflow-zh/get_started/os_setup.html 你可以使用我们提供的 Pip, Docker, ...

  5. iOS 后台返回json解析出现的null的解决办法

    在后台返回值为Null为空时,我们代码没有判断时,程序就会崩溃.当时一直很疑惑是为啥,后来发现是数据问题,由于服务器的数据库中有些字段为空,然后以Json形式返回给客户端时就会出现这样的数据.当我们通 ...

  6. Leetcode 002-Search Insert Position

    #Given a sorted array and a target value, return the index if the target is found. If not, return th ...

  7. springboot实战--笔记

    由于这本书看过一遍,所以这里是二次复习,记录的东西比较少,就不分章节了. 共12章,524页,预计时间是18h 第一章 spring基础: 第二章 spring常用配置: bean的Scope:sin ...

  8. gitlab 外网 无法访问 查端口 看文档

    云服务器安装成功后 curl   页面可以正常跳转 重置密码的token  页面可以生成 但是  外网无法 访问 [root@test ~]# curl 127.0.0.1:18021 <htm ...

  9. 清理yum 缓存

    两条命令 yum clean all 以及 rm -rf /var/cache/yum/* 如何有效的清理yum缓存 - CSDN博客 https://blog.csdn.net/nsrainbow/ ...

  10. 修改JDK环境变量,不生效的问题

    一般是在/etc/profile下面配置JDK的环境变量 JAVA_HOME=/data/jdk1.7.0_72 JRE_HOME=/data/jdk1.7.0_72/jre PATH=$PATH:$ ...