Python 支持很多神奇的方法来实现对象中的自定义功能,例如 __lt__
、__getattr__
等。甚至还有魔术方法会影响某些内置功能的执行方式,例如 __len__
和 __instancecheck__
.但是 python 中的所有内置函数都有神奇的方法吗?
例如,如果我想更改any
函数在某个类上的执行方式,我可以在该类中指定一个__any__
魔术方法吗?如果这不是一个选项,有什么方法可以特别影响any
应用于该类的方式吗?(我意识到,如果我想要any
从可迭代对象接收项目的方式的特殊功能,我可以定义__iter__
,但这不是我想要做的)
请注意,我为any
实现自定义功能的愿望只是一个示例,我不想明确为any
定义自定义功能。
特殊方法可以让你钩子到概念中,而不是内置函数或其他东西。
__len__
是容器长度,而不是专门用于len()
函数的钩子。碰巧len()
函数是该功能的可见 API。
any()
期待一个可迭代的参数,你在这里寻找的概念是迭代器类型方法;钩住的不是函数,而是那个概念。
你可能想研究默认的类型抽象基类,看看Python类型实现了什么方法;这里许多特殊的方法被组合在一个可读的概述中。
不,只针对其中的很多,因为实用性需要。
(特别是对于__any__
,之前已经讨论过,但最终,它被认为是不需要的。
No.类可以实现的特殊方法列表记录在第 3.3 节中。