Describing Attribute Access
-
The following class methods can be used for attribute access:
__getattribute__()
__getattr__()
__setattr__()
__delattr__()
-
__getattribute__()
has the following properties:- Invoked before looking at the actual attributes on the object
- As a result, it can be tricky to implement correctly
-
__getattr__()
has the following properties:- Invoked if the attribute wasn't found
- It's good for implementing a fallback for missing attributes
-
__setattr__()
has the following properties:- Invoked when setting an attribute
-
__delattr__()
has the following properties:- Invoked when deleting an attribute
- In most scenarios, we'll prefer
__getattr__()
over__getattribute__()
- We would most likely either implement
__getattribute__()
or__getattr__()
, but not both - These special methods are used to parameterize access to attributes
>>> class Person:
... def __init__(self, name, age, sex):
... self.name = name
... self.age = age
... self.sex = sex
>>> attrs = ['name', 'age']
>>> p = Person('Jeff', 25, 'm')
>>> [getattr(p, a) for a in attrs]
['Jeff', 25]
Summarizing Special Methods
Method | Description |
---|---|
__getattribute__(self, name) |
Returns the attribute of self.name |
__getattr__(self, name) |
Returns the attribute of self.name and handles missing self.name |
__setattr__(self, name, value) |
Sets the attirbute of self.name to value |
__delattr__(self, name) |
Deletes the attribute self.name |
References
Previous
Next