Trong khi cố gắng bọc các vật thể tùy ý, tôi gặp phải vấn đề với từ điển và danh sách. Điều tra, tôi đã tìm ra một đoạn mã đơn giản có hành vi mà tôi đơn giản không hiểu. Tôi hy vọng một số bạn có thể cho tôi biết những gì đang xảy ra:Tại sao __getattribute__ không được gọi trên một lời gọi __getitem __- tiềm ẩn?
>>> 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__'