Decoradores de clase, herencia, super () y recursividad máxima

Estoy tratando de descubrir cómo usar decoradores en subclases que usansuper(). Como mi decorador de clase crea otra subclase, una clase decorada parece evitar el uso desuper() cuando cambia elclassName pasó asuper(className, self). A continuación se muestra un ejemplo:

def class_decorator(cls):
    class _DecoratedClass(cls):
        def __init__(self):
            return super(_DecoratedClass, self).__init__()
    return _DecoratedClass

class BaseClass(object):
    def __init__(self):
        print "class: %s" % self.__class__.__name__
    def print_class(self):
        print "class: %s" % self.__class__.__name__

bc = BaseClass().print_class()

class SubClass(BaseClass):
    def print_class(self):
        super(SubClass, self).print_class()

sc = SubClass().print_class()

@class_decorator
class SubClassAgain(BaseClass):
    def print_class(self):
        super(SubClassAgain, self).print_class()

sca = SubClassAgain()
# sca.print_class() # Uncomment for maximum recursion

La salida debe ser:

class: BaseClass
class: BaseClass
class: SubClass
class: SubClass
class: _DecoratedClass
Traceback (most recent call last):
File "class_decorator_super.py", line 34, in <module>
sca.print_class()
File "class_decorator_super.py", line 31, in print_class
super(SubClassAgain, self).print_class()
...
...
RuntimeError: maximum recursion depth exceeded while calling a Python object

¿Alguien sabe de una manera de no romper una subclase que utilizasuper() cuando usa un decorador? Idealmente, me gustaría reutilizar una clase de vez en cuando y simplemente decorarla sin romperla.

Respuestas a la pregunta(5)

Su respuesta a la pregunta