python是否具有所有内置函数的魔术方法?

时间:2014-02-15 18:31:39

标签: python built-in magic-methods

Python支持许多用于在对象中实现自定义功能的神奇方法,例如__lt____getattr__等。甚至有一些魔法方法会影响某些内置函数的执行方式,例如作为__len____instancecheck__。但是python中的所有内置函数都有魔术方法吗?

例如,如果我想更改any函数对某个类的执行方式,我可以在该类中指定__any__魔术方法吗?如果这不是一个选项,有什么方法可以特别影响any适用于该类的方式? (我意识到,如果我想要any从迭代中接收项目的方式的特殊功能,我可以定义__iter__,但这不是我想要做的事情)

请注意,我希望为any实现自定义功能只是一个示例,我并不明确要为any定义自定义功能。

3 个答案:

答案 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