小编Kyl*_*yle的帖子

在自定义 Python 类中动态重新分配 __len__

过去可以像__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

4
推荐指数
1
解决办法
431
查看次数

标签 统计

python ×1