python __new__ 用法


與__init__一樣,每當實例化類時MyClass(*args, **kwargs) ,__new__ 都會默認自動執行MyClass.__new__(*args, **kwargs),如果想改變默認__new__行為,可以對它自定義

看一個英寸轉換為米例子:

1 class inch(float):
2     def __new__(cls, arg=0.0):
3         return float.__new__(cls, arg * 0.0254)

改變了__new__的自定義實例化類

inch繼承自float

如果同時存在__new__ ,__init__則__new__比__init__先運行,__new__將返回一個對象

a = inch(12)

print isinstance(a, float) 這里將會是True,可以認為inch實例化的對象類型是float,是可以直接拿來做加減乘除等操作

print a + 0.1 #進行基本的浮點運算。

再來個單例的,通過重載__new__實現單例:

class Singleton(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
        return cls._instance

 


免責聲明!

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



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