有没有办法让 len()
在不修改类的情况下使用实例方法?
我的问题示例:
>>> class A(object):
... pass
...
>>> a = A()
>>> a.__len__ = lambda: 2
>>> a.__len__()
2
>>> len(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'A' has no len()
注意:
A
的不同实例将附加不同的__len__
方法- 我无法更改类
A
最佳答案
没有。 Python 总是通过对象的类查找特殊方法。这有几个很好的理由,一个是 repr(A)
应该使用 type(A).__repr__
而不是 A.__repr__
,它旨在处理 A
的实例而不是 A
类本身。
如果您希望 A
的不同实例以不同方式计算它们的 len
,请考虑将 __len__
委托(delegate)给另一个方法:
class A(object):
def __len__(self):
return self._len()
a = A()
a._len = lambda: 2
关于python - 如何在不修改类的情况下使 len() 在类的不同实例上使用不同的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36557079/