python __init__和__new__之間的區別


轉載自 http://blog.csdn.net/carolzhang8406/article/details/6856056

 

1 如果在類中同時定義了__init__和__new__,在創建對象的時候會有優先使用__new__


class A(object):
    def __init__(self):
        print("in init")
    def __new__(self):
        print("in new")
       
A()

2new方法會返回所構造的對象,init則不會,在使用new返回對象的時候會隱式調用init函數。new函數必須以cls作為第一個參數,而init則以self作為其第一個參數

實例:

class A(object):
  def __new__(cls, *args, **kwds):
    print "one"
    print "A.__new__", args, kwds
    return object.__new__(B, *args, **kwds)
  def __init__(cls, *args, **kwds):
    print "two"
    print "A.__init__", args, kwds
class B(object):
  def __new__(cls, *args, **kwds):
    print "three"
    print cls
    print B
    print "B.__new__", args, kwds
    return object.__new__(cls, *args, **kwds)
  def __init__(cls, *args, **kwds):
    print "four"
    print "B.__init__", args, kwds
class C(object):
  def __init__(cls, *args, **kwds):
    print "five"
    print "C.__init__", args, kwds
print C()
print "====================="
print A()
print "====================="
print B()


利用new創建一個類的對象的最常用的方法為:super(currentclass, cls).__new__(cls[, ...]) 
如下列

class A(object):
    def __new__(cls):
        Object = super(A, cls).__new__(cls)
        print "in New"
        return Object
    def __init__(self):
        print "in init"


class B(A):
    def __init__(self):
        print "in B's init"
        
B()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM