Introspecting Python Functions
Functions are objects Since everything in Python is an object so are functions. They are instances of class <class 'function'> and have properties and methods attached to them.
Let’s define a simple function and play with its properties:
1 2 3 4 5 6 7 8 >>> def square(x:int = 0) -> int: return x**2 ... >>> dir(square) ['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] >>> square.