zoukankan      html  css  js  c++  java
  • python __new__ __init__ 区别

    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'>
  • 相关阅读:
    软件工程 团队开发(2)
    软件工程 团队开发(1)
    大道至简阅读笔记01
    小工具集合用户模板和用户场景
    人月神话阅读笔记03
    人月神话阅读笔记02
    本周java学习
    本周学习总结
    本周java 学习进度报告
    《构建之法》读后感
  • 原文地址:https://www.cnblogs.com/wuxinyan/p/8939707.html
Copyright © 2011-2022 走看看