[Python-Dev] Attribute lookup (was Re: python-dev Summary for 2003年05月01日 through 2003年05月15日)

Aahz aahz@pythoncraft.com
2003年5月18日 21:58:22 -0400


[Normally I send my corrections to Brett privately, but since I'm taking
a whack at attribute lookup, I figured this ought to be public.]
On Sun, May 18, 2003, Brett C. wrote:
>> The only thing I would like help with this summary is if someone knows 
> the attribute lookup order (instance, class, class descriptor, ...) off 
> the top of their heads, can you let me know? If not I can find it out 
> by going through the docs but I figure someone out there has to know it 
> by heart and any possible quirks (like whether descriptors take 
> precedence over non-descriptor attributes).

This gets real tricky. For simple attributes of an instance, the order
is instance, class/type, and base classes of the class/type (but *not*
the metaclass). However, method resolution of the special methods goes
straight to the class. Finally, if an attribute is found on the
instance, a search goes through the hierarchy to see whether a set
descriptor overrides (note specifically that it's a set descriptor;
methods are implemented using get descriptors).
I *think* I have this right, but I'm sure someone will correct me if I'm
wrong.
> LookupError exists and subclasses both IndexError and KeyError. 
> Rather handy when you don't care whether you are dealing with a list or 
> dictionary but do care if what you are looking for doesn't exist.
> os.walk also gained a parameter argument called onerror that takes 
> a function that will be passed any exception raised by os.walk as it 
> does its thing; previously os.walk ignored all errors.

"and has as subclasses"
-- 
Aahz (aahz@pythoncraft.com) <*> http://www.pythoncraft.com/
"In many ways, it's a dull language, borrowing solid old concepts from
many other languages & styles: boring syntax, unsurprising semantics,
few automatic coercions, etc etc. But that's one of the things I like
about it." --Tim Peters on Python, 16 Sep 93

AltStyle によって変換されたページ (->オリジナル) /