Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
len()函数在Python中工作不正常_Python_List_Function - Fatal编程技术网

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

len()函数在Python中工作不正常,python,list,function,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 l

我有以下代码:

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;我不明白为什么

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

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

当您这样使用它时,它将始终返回0:

x = Stat([1,3,4,5])
print len(x)
如果要覆盖len函数,请使用以下代码:

def __len__(self):       
    return len(self.s)
重写magic方法_len__self以控制对lenmy_stat_对象的调用的输出:


如果您试图运行的是lenstat而不是stat.len,那么您的函数len应该命名为uu len_u。以下是文件:


作为补充说明,您可能希望在init定义中替换lst=[],因为它可能会导致一些奇怪的行为。请在此处阅读:

如何创建Stat对象并调用len方法?首先在第一个数组中添加一些项,您可能不应该从列表继承。如果您希望能够执行lenStat,则特殊的方法名称为_len_;。调用len方法的正确方法是just Stat.len,因为它只是当前类中名为len的方法。但您不需要从列表继承来执行这两个操作。选择具有self.s或从中继承的包装列表之一。注意不要从列表中继承,在调用length方法时,进一步阅读应该作为lenobject@Frank你必须覆盖,然后这就解决了!不知道我为什么不试试这个。。。谢谢@弗兰克,我认为你继承了这份名单是为了能做莱米奥布。现在认真考虑不要继承列表,因为你知道DEF是一个能够做LeMyObjo的关键。
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)
stat = Stat([1, 2])
len(s) # 0 if len, 2 if __len__