https://medium.datadriveninvestor.com/mastering-monkey-patching-in-python-enhancing-code-flexibility-and-extensibility-9c4c3e89281d