¿Cómo escribir un método getitem estático en python?

¿Qué necesito cambiar para que esto funcione?

class A: @staticmethod def __getitem__(val): return "It works" print A[0] 

Tenga en cuenta que estoy llamando al método __getitem__ en el tipo A

Cuando se indexa un objeto, el método especial __getitem__ se busca primero en la clase del objeto. Una clase en sí misma es un objeto, y la clase de una clase suele ser de type . Así que para anular __getitem__ para una clase, puedes redefinir su metaclase (para hacerla una subclase de type ):

 class MetaA(type): def __getitem__(cls,val): return "It works" class A(object): __metaclass__=MetaA pass print(A[0]) # It works 

En Python3, la metaclase se especifica de esta manera:

 class A(object, metaclass=MetaA): pass