len()函数在Python中无法正常工作

时间:2016-04-19 05:41:04

标签: python list function

我有以下代码:

class Stat(list):
    def __init__(self, lst = []):
        self.s = list(lst)

    def __repr__(self):
        return "Stat({})".format(self.s)

    def add(self, item):
        self.s.append(item)

    def len(self):       
        return len(self.s)

...(more methods, but not necessary)

所有方法都正常工作,但len()。无论Stat对象的长度如何,返回的长度始终为0;我不明白为什么。

4 个答案:

答案 0 :(得分:6)

当你像这样使用它时,它将返回0:

x = Stat([1,3,4,5])
print len(x)

如果要覆盖len函数,请使用以下代码:

def __len__(self):       
    return len(self.s)

答案 1 :(得分:0)

s = Stat([1, 2])
s.add(1)
s.add(2)
print s.len()

我已经运行了你的代码,结果在我的环境中是正确的。

答案 2 :(得分:0)

覆盖魔术方法__len__(self)以控制对len(my_stat_object)的调用输出:

class Stat(list):
    def __init__(self, lst = []):
        self.s = list(lst)

    def __repr__(self):
        return "Stat({})".format(self.s)

    def add(self, item):
        self.s.append(item)

    def __len__(self):       
        return len(self.s)

答案 3 :(得分:0)

如果您要投放的内容为len(stat)而不是stat.len(),则您的函数len应命名为__len__。这是文档:object.len

stat = Stat([1, 2])
len(s) # 0 if len, 2 if __len__

作为旁注,您可能希望替换lst=[]定义中的init,因为它可能会导致一些奇怪的行为。在此处阅读:mutable default argument

相关问题