3 回答

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
字符串確實(shí)有一個(gè)長(zhǎng)度方法: __len__()
Python中的協(xié)議是在具有長(zhǎng)度的對(duì)象上實(shí)現(xiàn)此方法,并使用內(nèi)置len()函數(shù)為您調(diào)用它,類(lèi)似于您實(shí)現(xiàn)__iter__()和使用內(nèi)置iter()函數(shù)的方式(或者使用后面的方法)對(duì)于可迭代的對(duì)象,你的場(chǎng)景。
有關(guān)更多信息,請(qǐng)參閱模擬容器類(lèi)型。
以下是關(guān)于Python協(xié)議主題的很好的閱讀:Python和最小驚訝原則

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