Каков простой пример декорирования класса путем определения декоратора как класса?
Я пытаюсь добиться того, что было реализовано в Python 2.6, используя PEP 3129, за исключением того, что я использую классы, а не функции, как объясняет Брюс Эккель здесь.
Работает следующее:
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
За исключением приведенного выше, wrapClass — это не класс, а функция, которой манипулируют для возврата типа класса. Я хотел бы написать тот же callable следующим образом:
def __call__(self, cls):
class wrappedClass(cls):
def __init__(self):
... some code here ...
return wrappedClass
Как это сделать?
Я не совсем уверен, что входит в """... здесь какой-то код..."""