因此,当我尝试从班级获取列表的 len() 时出现此错误: TypeError: object of type 'Stuff' has no len() when I try:
>>> s = Stuff()
>>> len(s)
error instead of showing 0 like:
>>> l = []
>>> len(l)
0
代码:
class Stuff():
def __init__(self):
self.lst = []
因此,当我尝试从班级获取列表的 len() 时出现此错误: TypeError: object of type 'Stuff' has no len() when I try:
>>> 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
方法。