python 中 __init__和__new__的區別

用過python寫過面向對象的代碼的人對__init__方法應該很熟悉了,__init__ 方法一般用在初始化一個類實例的時候.python

例如:spa

# -*- coding: utf-8 -*-
'''
Created on Mar 31, 2016

@author: fky
'''
class Test(object):
    def __init__(self,name):
        self.name = name
        
    def __str__(self,):
        return '<Test: %s>' % self.name
    

if __name__ == '__main__':

    test = Test('test1')
    print(test)

  結果:code

<Test: test1>

這就是__init__普通用法,其實當實例化一個類最早被調用的方法 __new__ 方法。orm

class Test(object):
    
    def __new__(self,name):
        print('__new__')
        return super().__new__(self)
    
    def __init__(self,name):
        print('__init__')
        self.name = name
        
    def __str__(self,):
        return '<Test: %s>' % self.name
    

if __name__ == '__main__':

    test = Test('test1')
    print(test)

結果:對象

__new__
__init__
<Test: test1>

從這個運行結果能夠看到__new__方法的調用是發生在__init__以前的。繼承


__new__ 的做用utf-8

依照Python官方文檔的說法,__new__方法主要是當你繼承一些不可變的class時(好比int, str, tuple), 提供給你一個自定義這些類的實例化過程的途徑。還有就是實現自定義的metaclass。文檔

相關文章
相關標籤/搜索