【发布时间】:2011-03-01 15:52:07
【问题描述】:
我尝试定义类装饰器。我对装饰类中的__init__ 方法有疑问。如果__init__ 方法调用super,则会引发RuntimeError 超出最大递归深度。
代码示例:
def decorate(cls):
class NewClass(cls): pass
return NewClass
@decorate
class Foo(object):
def __init__(self, *args, **kwargs):
super(Foo, self).__init__(*args, **kwargs)
我做错了什么?
谢谢,米哈乌
编辑 1
感谢 Mike Boers 的回答,我意识到正确的问题是我应该怎么做才能使 super(Foo, self) 指向正确的类。
我也有两个限制。我想调用Foo.__init__ 方法,但我无法更改Foo 类定义。
编辑 2
我已经解决了这个问题。我修改装饰器功能体。我不返回新课程。而不是我包装原始类的方法。
【问题讨论】:
-
如何将装饰器应用到 Foo 类但不能更改它的定义?
-
我正在编写 ajax 验证 django 应用程序。它应该是通用的,不需要更改表单类定义。