Abstract
Explains the mechanics of attribute access for new-style Python objects:
- how functions become methods
- how descriptors and properties work
- method resolution order for classes
Read The Book
-
Single HTML Page [ zip | tar.gz ]
-
Multiple HTML Pages [ zip | tar.gz ]
Related
This book is part of a series:
-
Python Attributes and Methods [you are here]
Comments
Brilliant. Thank you very much for the clearest exposition of Python's type system I have seen.
Yes, very well explained. It's a plesure to read articles like this one. By the way, I really like cafepy site design =).
How does one start a new discussion ? I want to start a discuss between PHP and Python , which is better ?
Okay i figured it out. Must be tired tonight. :(
Is there a large python discussion board / community out there somewhere?
http://groups.google.com/group/comp.lang.python
This is excellent.
I got particularly intersted at SpecialType. It would be interstesting to have the distinction between 'type(list)' ('list' is given in the library doc as a builtin function) and types.ListType made clear.
It seems that 'list' is, in fact, a class or type name and, when called becomes an instance constructor.
Colin W.
Any 'class or type name' when called returns the instance - in fact that is the standard way of creating an instance in Python - call the class name. This is true for built-in types as well as classes you define. The built-in
listused to be a function but version 2.2 onward it is a type. Interestingly the behavior seems same as before when you use it to convert something to a list. But technically you are instantiating a list object rather than calling a function.Also,
listandtypes.ListTypeare one and the same object. In fact you can check in Python yourself::When you say
type(list), you get the metaclass<type 'type'>. See http://cafepy.com/article/python_types_and_objects/ch03.html (Python Objects Map), which shows bothlist(shown as<type 'list'>) and<type 'type'>.Thank you very much for these guides. They've answered virtually all of my questions regarding objects and types the standard documentation didn't answer - and there were a lot of those.
You've written that when retrieving an attribute from an object (print objectname.attrname) the first step performed by Python is to check whether attrname is a Python-provided attribute for objectname and if it is - return it. How exactly is this step performed? Also, I've looked for a good guide explaining what is found in object and what the dictproxy object is, and have found nothing - could you refer me to such a guide?
Thanks in advance!
Excellent reading about python specificities! I just would say that chapter 2 could be a little more detaild; I had some difficulty reading it. But nothing very serious - all your material is very readable, and you certainly helped me alot. Thanks!
I think there is an error (or maybe something changed?): in example 1.4, you say:
cobj.dict['d'] = "try to force a value" # Forcing value x = cobj.d # Futile: get is called instead
but some line above you say that resolution order proceed first with instance cobj.dict, then in the type cobj.class.dict
But overriding the class value ( d = Desc() ) with an instance value ( d = [HTML_REMOVED] ) the evaluation order changes. So the x = cobj.d will return the string.
I just tried this with Python 2.6.4:
Probably everyone noted this, but was just a fix.
Good article anyway, I love to read about the internals :)
~Aki
Ooops, sorry, forgot about _ _ set _ _. My last comment is wrong, sorry again. ~Aki