3 回答

TA貢獻2036條經驗 獲得超8個贊
字符串確實有一個長度方法: __len__()
Python中的協議是在具有長度的對象上實現此方法,并使用內置len()函數為您調用它,類似于您實現__iter__()和使用內置iter()函數的方式(或者使用后面的方法)對于可迭代的對象,你的場景。
有關更多信息,請參閱模擬容器類型。
以下是關于Python協議主題的很好的閱讀:Python和最小驚訝原則

TA貢獻2012條經驗 獲得超12個贊
吉姆對這個問題的回答可能有所幫助; 我把它復制在這里。引用Guido van Rossum:
首先,為了HCI的原因,我選擇了len(x)而不是x.len()(def __len __()來得晚了)。實際上有兩個相互交織的原因,都是人機交互:
(a)對于某些操作,前綴表示法只比讀后綴更好 - 前綴(和中綴?。┎僮髟跀祵W中有悠久的傳統,它喜歡視覺效果幫助數學家思考問題的符號。比較我們將x *(a + b)等公式重寫為x a + x b的簡單性,以及使用原始OO表示法做同樣事情的笨拙。
(b)當我讀到代碼為len(x)的代碼時,我知道它是在詢問某些東西的長度。這告訴我兩件事:結果是一個整數,參數是某種容器。相反,當我讀取x.len()時,我必須知道x是某種實現接口的容器,或者是從具有標準len()的類繼承的。當沒有實現映射的類具有get()或keys()方法,或者不是文件的類具有write()方法時,見證我們偶爾會遇到的混淆。
用另一種方式說同樣的事情,我認為'len'是一種內置操作。我不想失去那個。/ ...... /
添加回答
舉報