1 回答

TA貢獻1859條經驗 獲得超6個贊
據我了解
__repr__
,它應該返回一個字符串,該字符串可用于構造我們調用的對象__repr__
。換句話說,給予repr(object)
Python 解釋器應該構造對象。
這只是一個建議,而不是強加:
如果可能的話,這應該看起來像一個有效的 Python 表達式,可用于重新創建具有相同值的對象(給定適當的環境)。如果這是不可能的,則應返回 <...一些有用的描述...> 形式的字符串。
并且“如果可能”的解釋非常松散和弱,許多對象根本不會打擾,例如類或函數的 repr可以產生其源表示,但不要這樣做,因為它幾乎沒有用例并且這會比有用更煩人。
但是,如果有一個類具有
__slots__
,我很難想象如何實現它。這是因為在使用 時__slots__
,槽中的某些屬性可能會被初始化并具有值,而其他屬性可能不會。
當然不是。我從來沒有寫過一個有空位的類,但并不是所有的空位一直都被填滿。Plus hasattr
/getattr
與插槽配合得很好。
但我不得不問:你是貨物崇拜者嗎__slots__
?是否有人曾經告訴您使用插槽,而現在您卻到處使用它們?
slot 是一種內存優化工具,要點是每個成員只需要一個指針(+一些對象開銷),而不是 dict 實例的開銷(及其攤銷重新分配)。當您通常不填充插槽時,使用插槽幾乎沒有任何意義,添加__dict__
到插槽中更沒有意義。
更不用說最近的 Python 3 迭代已經為實例字典添加了各種優化,使得槽的用處變得更少,至少隨著屬性數量的增加(在 3.6 的相當大的類上,我們發現差異不到 5%,盡管在小類上它是可能仍然很重要)。
添加回答
舉報