docs: def decorate_class(self, klass, *decorator_args, **decorator_kwargs):
          """override this in a child class with your own logic, it must return a
          function that returns klass or the like
  
          :param klass: the class object that is being decorated
          :param decorator_args: tuple -- the arguments passed into the decorator (eg, @dec(1, 2))
          :param decorator_kwargs: dict -- the named args passed into the decorator (eg, @dec(foo=1))
          :returns: the wrapped class
          """
          raise RuntimeError("decorator {} does not support class decoration".format(self.__class__.__name__))
          return klass