如何通过将修饰器定义为类来装饰一个类的简单示例是什么?
我正在尝试使用类而不是函数来实现 Python 2.6 中使用 PEP 3129 实现的内容,就像 Bruce Eckel 在 这里 解释的那样。
以下代码可以工作:
class Decorator(object):
def __init__(self, arg):
self.arg = arg
def __call__(self, cls):
def wrappedClass(*args):
return cls(*args)
return type("TestClass", (cls,), dict(newMethod=self.newMethod, classattr=self.arg))
def newMethod(self, value):
return value * 2
@Decorator("decorated class")
class TestClass(object):
def __init__(self):
self.name = "TestClass"
print "init %s"%self.name
def TestMethodInTestClass(self):
print "test method in test class"
def newMethod(self, value):
return value * 3
除此之外,在上述代码中,wrappedClass 不是一个类,而是一个被操作后返回一个类类型的函数。我想编写相同的可调用函数如下:
def __call__(self, cls):
class wrappedClass(cls):
def __init__(self):
... some code here ...
return wrappedClass
我该如何做到这一点?
我不完全确定“……这里放一些代码……”需要包含什么。
__init __()
,那就不要覆盖。如果你确实想覆盖它,显然你想以某种方式改变它的行为。我的问题是:你想以什么方式改变它的行为? - Sven Marnach