Chapter 8 - metaclasses
=======================================================================================================================
1. Create a metaclass to test if attributes/methods are available.
2. Create a metaclass to test if specific classes are inherited.
3. Build a metaclass that wraps every method with a decorator (could be useful for logging/de- bugging purposes), something with a signature like this:
class SomeClass(metaclass=WrappingMeta, wrapper=some_wrapper):