On 8 Aug 2006 07:24:54 -0700 "Ziga Seilnacht" <[EMAIL PROTECTED]> wrote:
> [snip] > > Well... I'm not talking about metaclass attributes... that's > > perfectly consistent, agreed. > > > > I'm saying that when the class implements a custom __getattribute__, > > when you try to access the instance attributes from itself, it uses > > it. But if the class is a metaclass, instances of its instances have > > acess to the attribute anyway, but don't use the custom > > __getattribute__ you implemented. > > Attribute lookup for instances of a class never calls metaclass' > __getattribute__() method. This method is called only when you > access attributes directly on the class. Well... thanks for the answer. As I said on the first mail, I noticed this when I was explaining descriptors and methods to someone else... I implemented a pure-python Method class to show him exactly how it works. But, since their __get__ call is available at the class too, my first thought was that it was implemented at the metaclass __getattribute__, and when an instance tries to get a class attribute it would fail on its own __getattribute__, use the bound method at its class and make the call. After implementing a test metaclass I noticed it doesn't work this way, and even if it's a bit inconsistent (especially in the case of 'virtual' attributes), it seemed to me the reasonable thing to do, exactly for what you mentioned on your code... someone could easily break a lot of stuff doing it the wrong way, instead if not using __dict__. I mailed the list because someone else thought it might be a bug and I was in doubt... now it's clear it was the right thing to do. Regards, -- Pedro Werneck -- http://mail.python.org/mailman/listinfo/python-list