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__