因此,當我嘗試從我的類中獲取列表的len()時,出現此錯誤: TypeError:類型爲'Stuff'的對象沒有len() 當我嘗試:如何從python中的類返回列表的長度
>>> s = Stuff()
>>> len(s)
error instead of showing 0 like:
>>> l = []
>>> len(l)
0
代碼:
class Stuff():
def __init__(self):
self.lst = []
因此,當我嘗試從我的類中獲取列表的len()時,出現此錯誤: TypeError:類型爲'Stuff'的對象沒有len() 當我嘗試:如何從python中的類返回列表的長度
>>> s = Stuff()
>>> len(s)
error instead of showing 0 like:
>>> l = []
>>> len(l)
0
代碼:
class Stuff():
def __init__(self):
self.lst = []
定義__len__
特殊方法,像這樣:
class Stuff():
def __init__(self):
self.lst = []
def __len__(self):
return len(self.lst)
現在你可以這樣調用:
>>> s = Stuff()
>>> len(s)
0
使用__len__
特殊方法
class Stuff(object):
def __init__(self):
self.bits = []
def __len__(self):
return len(self.bits)
我強烈建議通過文檔頁面上特殊的方法閱讀。 http://docs.python.org/2/reference/datamodel.html#special-method-names
有相當數量的巧妙的事情可以做,比如如何定義的方法,如
Stuff() += 3
或Stuff()[4]
的行爲。
的參數len
可以是「一個序列(字符串,元組或列表)或映射(字典)」:http://docs.python.org/2/library/functions.html#len
它不能簡單地是一個對象,除非該對象明確地定義了一個__len__
方法。這是由len
函數隱式調用的方法。
爲什麼你的課堂'Stuff'有一個長度?如果你正在實現一個新的序列,你應該考慮繼承一個爲此目的而設計的基類,它將爲你提供'__len__'的實現。 – 2013-04-20 02:26:07
我認爲你應該做的是:len(s.lst) – 2013-04-20 02:41:52