Почему __getattribute __не вызывается при неявном вызове __getitem __-?

Пытаясь обернуть произвольные объекты, я столкнулся с проблемой со словарями и списками. Исследуя, мне удалось придумать простой кусок кода, поведение которого я просто не понимаю. Я надеюсь, что некоторые из вас могут рассказать мне, что происходит:

>>> class Cl(object): # simple class that prints (and suppresses) each attribute lookup
...   def __getattribute__(self, name):
...     print 'Access:', name
... 
>>> i = Cl() # instance of class
>>> i.test # test that __getattribute__ override works
Access: test
>>> i.__getitem__ # test that it works for special functions, too
Access: __getitem__
>>> i['foo'] # but why doesn't this work?
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'Cl' object has no attribute '__getitem__'
9
задан CommonGuy 27 May 2015 в 13:00
поделиться