https://developer.ibm.com/tutorials/ba-metaprogramming-python/