小编Hat*_*ked的帖子

为什么即使修改了 __len__(self) 也不能改变 len() 的行为?

class Worker:
    def __init__(self, pay):
        self.pay = pay

    def __len__(self):
        return "{}".format(len(str(self.pay)))

worker1 = Worker(1000)

print(worker1.__len__())
print(len(worker1))
Run Code Online (Sandbox Code Playgroud)
/home/minmin/PycharmProjects/myproject/venv/bin/python /home/minmin/PycharmProjects/myproject/mro.py
4
Traceback (most recent call last):
  File "/home/minmin/PycharmProjects/myproject/mro.py", line 35, in <module>
    print(len(worker1))
TypeError: 'str' object cannot be interpreted as an integer

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

当我打印调用 dunder 方法 ( worker1.__len__()) 时,它在控制台中返回 4。但是当我尝试使用len(worker1)相同的实例 ( worker1)使用 print函数时,它会引发错误。为什么会这样?

methods function python-3.x

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

标签 统计

function ×1

methods ×1

python-3.x ×1