I have a friend who likes to use metaclasses, and regularly offers them as a solution.
I am of the mind that you almost never need to use metaclasses. Why? because I
The way I used metaclasses was to provide some attributes to classes. Take for example:
class NameClass(type):
def __init__(cls, *args, **kwargs):
type.__init__(cls, *args, **kwargs)
cls.name = cls.__name__
will put the name attribute on every class that will have the metaclass set to point to NameClass.