我有以下代码:
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;我不明白为什么。
答案 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