Suppose following class:
class Class(object):
@classmethod
def getitem(*args):
print \'getitem %s\' % (args,)
@classmethod
def __geti
When you call x[test]
, the interpreter inspects type(x)
for the __getitem__
attribute. In case of Class[test]
it's the Class
's metaclass, i.e. type
. If you want to have a class-wide __getitem__
, define it inside a new metaclass. (Needless to say, that's a sort of magic, as anything you do with metaclasses)
class Meta(type):
def __getitem__(self, arg):
print "__getitem__:", arg
class X(object):
__metaclass__ = Meta
X['hello'] # output: __getitem__ hello