类装饰器,继承,super()和最大递归
发布于 2021-01-29 16:04:23
我试图弄清楚如何在use的子类上使用装饰器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()
使用装饰器时使用的子类的方法?理想情况下,我想不时地重用一个类,并在不破坏它的情况下简单地对其进行装饰。
关注者
0
被浏览
45
1 个回答