In python, this is apparently called the template pattern: https://sbcode.net/python/template/.
Whether a function is private (prefixed by _) or public is somewhat orthogonal to this pattern, but we should most likely make sure that all of the functions that should not be overridden are public. Additionally, we should at least mark them with the final decorator.