python中__new__和__init__的區別

  • __ new __ 是一個靜態方法,而__ init __是一個實例方法

  • __ new __ 方法返回一個創建的實例,而__ init __只能返回None或什麼都不返回

  • 只有在__ new __ 返回一個cls的實例後,__ init __纔會被調用

  • 當創建一個新實例時調用__ new __ ;初始化一個實例時用__ init __

  • 事例說明如下:

  • class display(object):
      #第一個參數self就是__new__創建的實例,返回None或者不返回
      def __init__(self, *args, **kwargs):
        print("init")
        #第一個參數爲cls,一般返回父類的__new__,一般__new__都是object類的後代
      def __new__(cls, *args, **kwargs):
        print("new")
        print(type(cls))
        return object.__new__(cls, *args, **kwargs)  
    a=display()
    #輸出結果:
    #執行順序,先__new__,後__init__
    new
    #__new__第一個參數cls類型爲'type'
    <class 'type'>
    init
    class another(object):
      def __new__(cls,*args,**kwargs):
        print("newano")
        return object.__new__(cls, *args, **kwargs)  
    class display(object):
      def __init__(self, *args, **kwargs):
        print("init")
      def __new__(cls, *args, **kwargs):
        print("newdis")
        print(type(cls))
        #返回的時其他類的實例
        return another.__new__(cls, *args, **kwargs)  
    a=display()
    #輸出結果:
    #__init__就用__new__提供的實例來完善self這個對象,並且不需要知道它的來源是否正宗.但是肯定同宗,都繼承於object.
    newdis
    <class 'type'>
    newano
    init

    參考連接:https://www.jb51.net/article/65343.htm

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章