有人可以展示一個簡單的例子嗎?我想達到什麼在Python 2.6使用PEP 3129已經實現,但使用的類不作爲布魯斯·埃克爾解釋herepython:通過將裝飾器定義爲類來裝飾一個類
以下工作:
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
這將如何完成? 編輯:我不完全知道什麼進入「」「......一些代碼在這裏......‘’」
您是否試過自己發佈的代碼?它應該工作。 – 2012-03-28 11:04:31
使用該功能的第一部分確實起作用。我怎麼會把wrappedClass寫成真正的類呢? – tsps 2012-03-28 11:08:26
你的裝飾者應該做什麼?我不能告訴你什麼代碼必須進入「一些代碼」,而不知道代碼應該做什麼。 – 2012-03-28 12:41:58