3.3.2 Customizing attribute access
The following methods can be defined to customize the meaning of
attribute access (use of, assignment to, or deletion of x.name)
for class instances.
-
Called when an attribute lookup has not found the attribute in the
usual places (i.e. it is not an instance attribute nor is it found in
the class tree for
self). name is the attribute name.
This method should return the (computed) attribute value or raise an
AttributeError exception.
Note that if the attribute is found through the normal mechanism,
__getattr__() is not called. (This is an intentional
asymmetry between __getattr__() and __setattr__().)
This is done both for efficiency reasons and because otherwise
__setattr__() would have no way to access other attributes of
the instance. Note that at least for instance variables, you can fake
total control by not inserting any values in the instance attribute
dictionary (but instead inserting them in another object). See the
__getattribute__() method below for a way to actually get
total control in new-style classes.
| __setattr__( |
self, name, value) |
-
Called when an attribute assignment is attempted. This is called
instead of the normal mechanism (i.e. store the value in the instance
dictionary). name is the attribute name, value is the
value to be assigned to it.
If __setattr__() wants to assign to an instance attribute, it
should not simply execute "self.name = value" -- this
would cause a recursive call to itself. Instead, it should insert the
value in the dictionary of instance attributes, e.g.,
"self.__dict__[name] = value". For new-style classes,
rather than accessing the instance dictionary, it should call the base
class method with the same name, for example,
"object.__setattr__(self, name, value)".
-
Like __setattr__() but for attribute deletion instead of
assignment. This should only be implemented if "del
obj.name" is meaningful for the object.
Release 2.4.5, documentation updated on 18 October 2006.
See About this document... for information on suggesting changes.
|