Python支持许多用于在对象中实现自定义功能的神奇方法,例如__lt__
,__getattr__
等。甚至有一些魔法方法会影响某些内置函数的执行方式,例如作为__len__
和__instancecheck__
。但是python中的所有内置函数都有魔术方法吗?
例如,如果我想更改any
函数对某个类的执行方式,我可以在该类中指定__any__
魔术方法吗?如果这不是一个选项,有什么方法可以特别影响any
适用于该类的方式? (我意识到,如果我想要any
从迭代中接收项目的方式的特殊功能,我可以定义__iter__
,但这不是我想要做的事情)
请注意,我希望为any
实现自定义功能只是一个示例,我并不明确要为any
定义自定义功能。
答案 0 :(得分:4)
这种特殊的方法让您可以使用概念,而不是内置函数或其他内容。
__len__
是容器长度,而不是len()
函数的钩子。恰好len()
函数是该功能的可见API。
any()
需要可迭代的参数,您在这里寻找的概念是Iterator type methods;它不是被钩住的功能,而是这个概念。
您可能想要研究default type abstract base classes以了解Python类型实现的方法;这里有许多特殊方法在可读的概述中组合在一起。
答案 1 :(得分:1)
不,只有很多人,因为实用性要求。
(特别针对__any__
,it has been discussed之前,但最终认为不需要它。)
答案 2 :(得分:0)
没有。类可以实现的特殊方法列表是documented in section 3.3。