Lazily-evaluated Property Pattern in Python
Lazy evaluation is a useful pattern that can improve your code's efficiency in many situations.
One example of this is instance attributes that take long to compute:
This approach may cause initialization to take unnecessarily long, especially when you don't always need to access Person#relatives
.
A better strategy would be to get relatives
only when it's needed (i.e., "lazily"):
In this case, the list of relatives is only computed the first time Person#relatives
is accessed. After
that, it's stored in Person#_relatives
to prevent repeated evaluations.
A perhaps more Pythonic approach would be to use a decorator that makes a property lazy-evaluated
This removes a lot of boilerplate, especially when an object has many lazily-evaluated properties.
Please send comments by email. I welcome your feedback, advice, and criticism.