我有一个配有<代码>_len__方法的索引。 问题:
如果您的电话清单(y)和 y有 len__
的界定方法,则请上len__
。
(1) 为什么?
在我的产出中,你将看到,从(y)清单来看,第一次尝试的时间是零。 如果看一看清单的产出,你就会看到,在第一次发言中,我收到一份空名单,在第二次名单上,我收到“正确”名单。
2) 为什么它回到一个零长的清单?
3) 为什么清单篇幅太长,不能满足随后的所有要求?
还指出,“数字”不是问题。 C类是相同的,但使用一种手法,然后打电话到()。
法典:
showcalls = False
class A(object):
_length = None
def __iter__(self):
if showcalls:
print "iter"
self.i = 0
return self
def next(self):
if showcalls:
print "next"
i = self.i + 1
self.i = i
if i > 2:
raise StopIteration
else:
return i
class B(A):
def __len__(self):
if showcalls:
print "len"
if self._length is None:
for i,x in enumerate(self):
pass
self._length = i
return i
else:
return self._length
class C(A):
def __len__(self):
if showcalls:
print "len"
if self._length is None:
i = 0
while True:
try:
self.next()
except StopIteration:
self._length = i
return i
else:
i += 1
else:
return self._length
if __name__ == __main__ :
a = A()
print len(list(a)), len(list(a)), len(list(a))
print
b = B()
print len(list(b)), len(list(b)), len(list(b))
print
c = C()
print len(list(c)), len(list(c)), len(list(c))
产出:
2 2 2
0 2 2
0 2 2