这将返回您的期望:
class My(object):
def __len__(self):
return 6
a = My()
print(len(a))
Run Code Online (Sandbox Code Playgroud)
但这会引发错误:
class My2(object):
pass
b = My2()
b.__len__ = lambda x: 6
print(len(b))
Run Code Online (Sandbox Code Playgroud)
TypeError: object of type 'My2' has no len()
为什么?
这是因为您尝试在实例上定义方法而不是在基础类上.例如,这可以工作:
class My2(object):
pass
b = My2()
b.__class__.__len__ = lambda x: 6
print(len(b)) # Prints 6
Run Code Online (Sandbox Code Playgroud)
此外,为了澄清这些评论,这不是一个lambda或函数的问题,因为这不起作用:
class My2(object):
pass
def l(x):
return 6
b = My2()
b.__len__ = l
print(len(b)) # TypeError: object of type 'My2' has no len()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38 次 |
| 最近记录: |