zoukankan      html  css  js  c++  java
  • Python的__new__函数

    如果你以为Python的__init__函数相当于构造函数,那你就大错特错了。__init__只是负责初始化的函数,真正创建对象的函数是__new__函数。
    __new__函数是一个类函数,它负责真正的函数创建过程,返回创建的对象。对象创建完毕后,会执行该对象相应的__init__函数。
    也就是说,Python对象的创建过程如下列伪代码所示:

    obj = class.__new__(args)
    if isinstance(obj, class):
        class.__init__(obj, args)
    return obj
    

    在这里可以看一个实际的例子:

    class A(object):
    	def __new__(cls):
    		return object.__new__(cls)
    	
    	def __init__(self):
    		self.val = 0
    

    可以看到,在__new__的阶段就已经创建了对象,然后__init__只是执行初始化操作而已。
    如果这样写:

    class A(object):
    	def __new__(cls):
    		return 0
    	
    	def __init__(self):
    		self.val = 0
    
    a = A()
    print a
    

    就会得到为0的输出。因为此时创建的对象是一个int,因此不会再执行A的__init__函数。

  • 相关阅读:
    English Dictionary site for ODE and OALD
    vmic environment
    makefile
    the diference between include and import
    windows 工具命令 cmd
    python namespace
    shell cmd args
    ROE, ROC
    IP
    链接及常用软件
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/11954079.html
Copyright © 2011-2022 走看看