bruno.42.desthuilli...@websiteburo.invalid wrote:
So the lookup chain is:
1/ lookup the class and bases for a binding descriptor
2/ then lookup the instance's __dict__
3/ then lookup the class and bases for a non-binding descriptor or
plain attribute
4/ then class __getattr__
Also and FWIW, there's a "step zero" : calls __getattribute__. All the
above lookup mechanism is actually implemented by
object.__getattribute__.
Okay, so instance attributes never use their __get__/__set__/etc when
looking up.
A binding descriptor is one that has a __set__ (even if it doesn't do
anything) and it takes priority over instance variables. Properties are
binding descriptors even if they don't have a set function specified. A
non-binding descriptor doesn't have __set__ and instance variables take
priority over them.
For reading:
1. Lookup in the class/bases for a binding descriptor and if found use
its __get__
2. If instance, look up in instance __dict__ and if found return it
3. Lookup in the class/bases
a. if found and a descriptor use it's __get__
b. if found and not a descriptor return it
4. Use __getattr__ (if instance?)
For writing:
1. If instance
a. lookup in the class/bases for a binding descriptor and if found
use its __set__
b. write to instance __dict__
2. If class, write in class __dict__
I think I understand it now. Thanks.
Brian Vanderburg II
--
http://mail.python.org/mailman/listinfo/python-list