The tricky part is getting the other arguments into each of the property estimators.

If each property estimator takes arbitrary keyword arguments, and there aren’t conflicts, then the example above is sufficient. Instead of kwargs, another option is to pass a class instance that holds the required state. There’s other design patterns that could be used, such as the action/executor. At this stage, that looks like overkill to me.

At this point, this is all reflection as I haven’t done this refactor. If something has worked well for you in this situation, let me know!

Thanks to Spencer Cox, Lori Logan for improving this post. Special thanks to Yves Richard for the spirited discussion about callbacks, async, and function composition.