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
Niza y dulce :) – Woltan
en py3 no –
@ups: las metaclases se especifican de forma diferente en Python3. He agregado código para mostrar cómo, arriba. – unutbu