过去可以像__len__()在运行时一样设置内部函数。下面是一个例子:
#! /usr/bin/python3
import sys
class FakeSequence:
def __init__(self):
self.real_sequence = list()
self.append = self.real_sequence.append
self.__len__ = self.real_sequence.__len__
def workaround__len__(self):
return len(self.real_sequence)
if __name__ == '__main__':
fake_sequence = FakeSequence()
fake_sequence.append(1)
fake_sequence.append(2)
fake_sequence.append(3)
length = len(fake_sequence)
sys.stdout.write("len(fake_sequence) is %d\n" % (length))
Run Code Online (Sandbox Code Playgroud)
以下是您尝试运行时的结果:
$ python2 len_test
len(fake_sequence) is 3
$ python3 len_test
Traceback (most recent call last):
File "len_test", line 18, in <module>
length = len(fake_sequence)
TypeError: object of type 'FakeSequence' has no len()
Run Code Online (Sandbox Code Playgroud)
如果我将__len__()方法定义为类的一部分(删除上面的“解决方法”),它会按您的预期工作。如果我__len__()像上面那样定义并重新分配它FakeSequence.__len__() …
python ×1