2015-07-13 71 views
2

看來Python的不可變類的__init__方法是沒有意義的,因爲在創建一個對象之後,屬性的賦值是不允許的。但顯然__init__方法確實存在不可變對象。它是如何實現的?它是否有空方法體?Python不可變類的__init__方法,例如漂亮的樣子?

+0

通常如果你想緩存實例,你將使用'__new__'來返回一個先前構造的對象。我們使用的常見模式是通過namedtuple繼承一個元組(不可變),並設置'__slots__ =()'來防止賦值給任意屬性。 –

+0

你在尋找一個*不可變*或*內建*模式嗎?從我所知道的內容來看,一個新的float [只在C中定義](https://hg.python.org/cpython/file/c6880edaf6f3/Objects/floatobject.c#l1788)。 – Makoto

回答

2

__init__什麼都不做,只是繼承自object。所有的工作都在__new__完成。

In [1]: float.__init__ 
Out[1]: <slot wrapper '__init__' of 'object' objects> 

In [2]: float.__new__ 
Out[2]: <function float.__new__> 

float類的tp_new的定義爲float_new,由此可以看出here