Have a class method that you want to behave differently depending on an instance parameter, i.e. like this:
def frob(self, v):
if self.mode == X:
return frob_x(v)
else:
return frob_y(v)
... but don't want to pay that runtime penalty on every call to .frob() ?
functools to the rescue:
@functools.cached_property
def frob(self):
if self.mode == X:
return frob_x
else:
return frob_y
Then just call .frob(val) normally! Pay once.