qmax
@qmax
программер

__getitem__ не может быть @classmethod

Например, такой вот класс:
class Class(object):
    @classmethod
    def getitem(*args):
        print 'getitem %s' % (args,)
    @classmethod
    def __getitem__(*args):
        print '__getitem__ %s' % (args,)


Метод getitem ведёт себя как и ожидается: принимает первым параметром Class при вызове как от класса так и от объекта
А вот __getitem__ вазывается только от объекта, а от класса получает первым параметром type:

calling Class.getitem(test)
getitem (<class '__main__.Class'>, 'test')

calling obj.getitem(test)
getitem (<class '__main__.Class'>, 'test')

calling Class[test]
'type' object has no attribute '__getitem__'

calling obj[test]
__getitem__ (<class '__main__.Class'>, 'test')


Что там за магия такая внутри __getitem__?
  • Вопрос задан
  • 2766 просмотров
Пригласить эксперта
Ответы на вопрос 1
qmax
@qmax Автор вопроса
программер
пока писал тут на stackoverflow уже ответили:
Все __магические__ методы ищутся в словаре класса, а не объекта.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы