1. 参数

    • __new__的第一个占位参数是class对象
    • __init__的第一个占位参数是class的实例对象
    • 其他的参数应一致
  2. 作用
    • __new__ 用来创建实例,在返回的实例上执行__init__,如果不返回实例那么__init__将不会执行
    • __init__ 用来初始化实例,设置属性等其它初始化的动作

  __new__在Python中是真正的构造方法(创建并返回实例),通过这个方法可以产生一个”cls”对应的实例对象,所以说”new”方法一定要有返回。

  __init__是一个初始化的方法,”self”代表由类产生出来的实例对象,”init”将对这个对象进行相应的初始化操作。


class A(object):
def __init__(self,*args,**kwargs):
print ("calling __init__ from %s" % self.__class__) def __new__(cls,*args,**kwargs):
obj = object.__new__(cls,*args,**kwargs)
print ("calling __new__ from %s" % obj.__class__)
return obj class B(A):
def __init__(self,*args,**kwargs):
print ("calling __init__ from %s" % self.__class__)
def __new__(cls,*args,**kwargs):
obj = object.__new__(A,*args,**kwargs)
print ("calling __new__ from %s" % obj.__class__)
return obj b=B()
print (type(b))

在B的”new”方法中,通过”obj = object.new(A, *args, **kwargs)”创建了一个A的实例,在这种情况下,B的”init”函数就不会被调用到。

输出为:

calling __new__ from <class '__main__.A'>
<class '__main__.A'>

python __new__ __init__ 区别的更多相关文章

  1. python __new__ __init__ __del__

    1.python实例化顺序是.__new__ -->__init__ --> __del__ 2.如果重写new没return,就实例化不成功

  2. __new__ __init__区别

    1 class A(object): 2 def __init__(self,*args, **kwargs): 3 print "init A" 4 def __new__(cl ...

  3. python __new__ __init__

    写过python类的都会知道__init__,可能也了解__new__.我之前也了解__new__,但只做的它发生在__init__之前.其他的就比较模糊了 今天在学习单例模式时,看到有人用__new ...

  4. python 的__init__ 和__new__ 区别

    在此介绍一下  __init__ 和  __new__ 先后调用的区别 代码如下: # __init__ 和 __new__的区别 # 通常在编代码时,__init__ 较为常见,但是__new__却 ...

  5. python __new__以及__init__

    @[深入Python]__new__和__init__ 1 2 3 4 5 6 7 8 class A(object):     def __init__(self):         print & ...

  6. python的__init__和__new__

    本文所有实例代码在python3.7下 一.__new__和__init__区别 1.__new__先于__init__执行;__new__是相当于其他OOP语言的构造方法,负责创建实例:之后,__i ...

  7. __init__ 和__new__的区别

    __init__和__new__的区别 __init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值. __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例, ...

  8. import,reload,__import__在python中的区别

    import,reload,__import__在python中的区别 http://blog.csdn.net/five3/article/details/7762870 import作用:导入/引 ...

  9. python中__init__.py文件的作用

    问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...

随机推荐

  1. LightOJ1341 Aladdin and the Flying Carpet —— 唯一分解定理

    题目链接:https://vjudge.net/problem/LightOJ-1341 1341 - Aladdin and the Flying Carpet    PDF (English) S ...

  2. android:Android中用文件初始化sqlite数据库

    很多时候在应用安装初始化时,需要创建本地数据库,同时为数据库添加数据,之后再从数据库中读取数据. 这里有2个思路 1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时,用现成的 ...

  3. C3P0 配置

    C3P0是一个开源的JDBC连接池. 在Spring中,C3P0的一些配置,介绍如下(只列了一部分,不是全部) <!-- c3p0连接池配置 --> <bean id="d ...

  4. 自然语言处理:问答 + CNN 笔记

    参考 Applying Deep Learning To Answer Selection: A Study And An Open Task follow: http://www.52nlp.cn/ ...

  5. System.exit(0);和finish();,push原理

    今天师姐问我安卓后台的问题,想起几年前做进制转换的时候特意研究了一下怎么才能「不驻留内存地退出」.虽然Android不推荐用户手动关闭进程,但是在那个内存捉襟见肘的年代,不得不考虑内存. 首先直接按b ...

  6. 51nod1060:最复杂的数(DFS求反素数)

    把一个数的约数个数定义为该数的复杂程度,给出一个n,求1-n中复杂程度最高的那个数.   例如:12的约数为:1 2 3 4 6 12,共6个数,所以12的复杂程度是6.如果有多个数复杂度相等,输出最 ...

  7. SPOJ Find the max XOR value(二进制,贪心即可)

    You have two integers L and R, and you are required to find the max xor value of a and b where L < ...

  8. 洛谷P1462通往奥格瑞玛的道路——二分答案最短路

    题目:https://www.luogu.org/problemnew/show/P1462 最大值最小问题,二分答案. 代码如下: #include<iostream> #include ...

  9. aidl笔记 2/5/2015

    interface Test { //测试的接口 void fun();} Stub 是一个Binderclass Stub extend Binder implements Test { publi ...

  10. mysql server安装(windows)

    1 在 https://dev.mysql.com/downloads/mysql/ 上下载mysql压缩包 2 解压,并把bin目录加入环境变量 3 初始化,完成后会在mysql根目录下生成data ...