Each time we call a property, we are recalculating a function. If it is an expensive calculation, we might want to cache the result. This way, the next time the property is accessed, the cached value is returned: from django.utils.functional import cached_property #... @cached_property def full_name(self):