当我尝试从我的班级获取列表的len()时,我收到此错误: TypeError:'Stuff'类型的对象没有len() 当我尝试:
>>> s = Stuff()
>>> len(s)
error instead of showing 0 like:
>>> l = []
>>> len(l)
0
代码:
class Stuff():
def __init__(self):
self.lst = []
答案 0 :(得分:5)
定义__len__
特殊方法,如下所示:
class Stuff():
def __init__(self):
self.lst = []
def __len__(self):
return len(self.lst)
现在你可以这样称呼它:
>>> s = Stuff()
>>> len(s)
0
答案 1 :(得分:1)
使用__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]
的行为。
答案 2 :(得分:0)
len
的参数可以是“序列(字符串,元组或列表)或映射(字典)”:http://docs.python.org/2/library/functions.html#len
不能只是一个对象,除非该对象明确定义__len__
方法。这是len
函数隐式调用的方法。