我對python文檔here下面的例子有些困惑。Python:當cls不是float時,爲什麼會浮動.__ new __(cls)?
>>> class inch(float):
... "Convert from inch to meter"
... def __new__(cls, arg=0.0):
... return float.__new__(cls, arg*0.0254)
...
>>> print inch(12)
0.3048
>>>
大概,float是這裏定義的實際的float類,它定義在Python內部的某處。當我們調用float.__new__(cls, argument)
時,我們狡猾地調用返回給定參數的float實例的函數,但我們將它傳遞給inch類而不是float類。由於英寸課程沒有做任何事情,爲什麼這個工作?
太棒了!這使得現在更有意義。所以,爲了確保我現在能理解 - __new__是一種靜態方法,也就是說它對'自我'沒有興趣(也沒有理由)。當我爲這個特定的類覆蓋它時,它可能保持靜態(因爲很難有一個需要實例的__new__方法)。如何知道沒有任何裝飾器做到這一點? –
因爲'__new__'是特殊的。它自動是一個靜態方法,請參閱我在答案中鏈接的文檔。 –
'__new__'是雙重特別。它本可以是一種分類方法。 (''float .__ new __(cls,..)'')傳遞'cls'時不帶'super()'調用父'__new__'的能力可能是[爲什麼'__new__'不是類方法] (http://stackoverflow.com/questions/9092072/why-isnt-new-in-python-new-style-classes-a-class-method)。 – jfs