Декораторы классов, Наследование, супер () и максимальная рекурсия

Я пытаюсь выяснить, как использовать декораторы на подклассах, которые используютsuper(), Поскольку мой декоратор класса создает другой подкласс, декорированный класс, кажется, препятствует использованиюsuper() когда это меняетclassName перешел кsuper(className, self), Ниже приведен пример:

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

Выход должен быть:

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

Кто-нибудь знает способ не сломать подкласс, который используетsuper() при использовании декоратора? В идеале я хотел бы время от времени повторно использовать класс и просто украшать его, не ломая его.

Ответы на вопрос(5)

Ваш ответ на вопрос