2011-05-31 23 views

Respuesta

21

Cuando se indexa un objeto, se busca primero el método especial __getitem__ en la clase del objeto. Una clase en sí misma es un objeto, y la clase de una clase generalmente es type. Así que para anular __getitem__ para una clase, puede redefinir su metaclase (para que sea 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 
+0

Niza y dulce :) – Woltan

+0

en py3 no –

+1

@ups: las metaclases se especifican de forma diferente en Python3. He agregado código para mostrar cómo, arriba. – unutbu

Cuestiones relacionadas