2
看來Python的不可變類的__init__
方法是沒有意義的,因爲在創建一個對象之後,屬性的賦值是不允許的。但顯然__init__
方法確實存在不可變對象。它是如何實現的?它是否有空方法體?Python不可變類的__init__方法,例如漂亮的樣子?
看來Python的不可變類的__init__
方法是沒有意義的,因爲在創建一個對象之後,屬性的賦值是不允許的。但顯然__init__
方法確實存在不可變對象。它是如何實現的?它是否有空方法體?Python不可變類的__init__方法,例如漂亮的樣子?
__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。
通常如果你想緩存實例,你將使用'__new__'來返回一個先前構造的對象。我們使用的常見模式是通過namedtuple繼承一個元組(不可變),並設置'__slots__ =()'來防止賦值給任意屬性。 –
你在尋找一個*不可變*或*內建*模式嗎?從我所知道的內容來看,一個新的float [只在C中定義](https://hg.python.org/cpython/file/c6880edaf6f3/Objects/floatobject.c#l1788)。 – Makoto