2

因此,当我尝试从班级获取列表的 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 = []
4

3 回答 3

6

像这样定义__len__特殊方法:

class Stuff():
    def __init__(self):
         self.lst = []
    def __len__(self):
         return len(self.lst)

现在你可以这样称呼它:

>>> s = Stuff()
>>> len(s)
0
于 2013-04-20T02:18:33.077 回答
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() += 3Stuff()[4]行为。

于 2013-04-20T02:18:37.887 回答
0

参数len可以是“序列(字符串、元组或列表)或映射(字典)”:http ://docs.python.org/2/library/functions.html#len

不能简单地是一个对象,除非该对象明确定义了一个__len__方法。这是函数隐式调用的len方法。

于 2013-04-20T02:19:41.267 回答