特殊方法是在类上而不是实例上查找的-
与常规方法首先在实例上查找的方法不同。请参阅Python数据模型文档中的特殊方法查找。
考虑
Class作为的实例
type,这意味着您在
Class.getitem(test)
它首先查找您所讲的内容:
Class名为的自己属性中的方法
getitem。但是,当您使用
Class[test]
它跳过了这一点,直接进入
type(是的类
Class,或者是其元类),因此调用
type.__getitem__(Class,test)。那么,究竟是怎么回事是不是
__getitem__得到
type的第一个参数(它仍然会得到
Class,因为它如果明确
Class.__getitem__(test)),其将
__getitem__是Python将在这种情况下不存在。为了使其存在,您需要定义自己的元类,
Class以将其定义为实例方法,而不是将其定义
Class为类方法。



