Building higher-order functions with callables
We can define higher-order functions as callable classes. This builds on the idea of writing generator functions; we'll write callables because we need statement features of Python. In addition to using statements, we can also apply a static configuration when creating the higher-order functions.
What's important about a callable class definition is that the class object, created by the class
statement, defines a function that emits a function. Commonly, we'll use a callable object to create a composite function that combines two other functions into something relatively complex.
To emphasize this, consider the following class:
from typing import Callable, Optional, Any class NullAware: def __init__( self, some_func: Callable[[Any], Any]) -> None: self.some_func = some_func def __call__(self, arg: Optional[Any]) -> Optional[Any]: return None if arg is None else self.some_func(arg)
This class is used to...