2014-02-15 40 views
1

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

例如,如果我想改变any函数对某个类的执行方式,我可以在该类中指定一个__any__魔法方法吗?如果这不是一个选项,有什么方法可以特别影响any适用于该类的方式吗? (我知道,如果我想为any接收来自迭代的项目我可以定义__iter__的方式特殊的功能,但是这不是我所希望做的)

请注意,我的愿望实现自定义的功能为any只是一个例子,我不明确想要为any定义自定义功能。

+1

没有,有大量的内置功能,其中挂钩是没有意义的。例如'chr()'或'id()'。 –

+0

@MartijnPieters,如果你正在使用自己的数字类型,你可以在任何可以使用int的地方使用它,它对'chr'有一定的意义。 –

+0

@MikeGraham实际上,可以通过定义'__int__'来完成,这更适合于这个目的。 – delnan

回答

4

这个特殊的方法让你勾起概念,没有那么多的内置函数或其他东西。

__len__是一个容器长度,不是专门为len()函数挂钩。恰巧len()函数是该功能的可见API。

any()预计可迭代参数,您在这里寻找的概念是Iterator type methods;它不是被吸引的功能,而是这个概念。

您可能想研究default type abstract base classes以查看Python类型实现的方法;这里有许多特殊的方法以可读的概述组合在一起。

+0

“*'any()'期望* iterator *参数”否,'any'需要* iterable *参数。 –

+0

@MikeGraham:确实,它调用了iter(),所以迭代就足够了。出于某种原因,我仍然使用术语可互换,但有一个区别,我应该注意更多.. –

1

不,只适用于其中的大部分,视实际需求而定。

(具体为__any__it has been discussed之前,但最终,它不被认为是必要的。)

相关问题