Hat*_*ked 1 methods function python-3.x
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函数时,它会引发错误。为什么会这样?
内置函数len是一个包装函数,它调用__len__给定对象的方法,然后验证该方法的返回值__len__是否为整数。如果您__len__直接调用该方法,则不会进行此类验证。
换句话说,您应该始终确保__len__返回一个整数以通过len的验证:
def __len__(self):
return len(str(self.pay))
Run Code Online (Sandbox Code Playgroud)