任意のオブジェクトをラップしようとしているうちに、辞書やリストに問題が発生しました。調べてみると、わたしは単純に理解できない振る舞いを持つ単純なコードを思いつきました。私はあなたのいくつかは、何が起こっている私に言うことを願って:暗黙の__getitem __-呼び出しで__getattribute__が呼び出されないのはなぜですか?
>>> 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__'