因此,当我尝试从我的类中获取列表的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