我最近一直在玩 Python,我发现有点奇怪的是广泛使用“魔术方法”,例如,为了使其长度可用,一个对象实现了一个方法, def __len__(self)
,然后在您编写 len(obj)
时调用它。
我只是想知道为什么对象不简单地定义一个 len(self)
方法并将其作为对象的成员直接调用,例如 obj.len()
?我确信 Python 这样做一定有充分的理由,但作为新手,我还没有弄清楚它们是什么。
原文由 Greg Beech 发布,翻译遵循 CC BY-SA 4.0 许可协议
AFAIK,
len
在这方面很特别并且有历史根源。这 是常见问题解答中 的引述:
其他“神奇方法”(实际上在 Python 民间传说中称为 _特殊方法_)很有意义,其他语言中也存在类似的功能。它们主要用于在使用特殊语法时隐式调用的代码。
例如:
等等…