下面是一个示例代码,演示如何编写一个类装饰器:
def decorator(cls):
class DecoratedClass(cls):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.decorated_attr = 'decorated attribute'
def decorated_method(self):
print('This is a decorated method')
return DecoratedClass
@decorator
class OriginalClass:
def __init__(self, attr):
self.attr = attr
def original_method(self):
print('This is an original method')
# 使用装饰后的类
obj = OriginalClass('original attribute')
print(obj.attr) # 输出: original attribute
print(obj.decorated_attr) # 输出: decorated attribute
obj.original_method() # 输出: This is an original method
obj.decorated_method() # 输出: This is a decorated method
在上面的示例中,我们定义了一个名为decorator
的装饰器函数。该装饰器函数接受一个类作为参数,并返回一个新的类。新的类继承自原始类,并在初始化方法中添加了一个新的属性decorated_attr
和一个新的方法decorated_method
。
然后,我们使用@decorator
语法将装饰器应用到OriginalClass
类上,将其转换为DecoratedClass
类。通过实例化DecoratedClass
类的对象,我们可以看到新添加的属性和方法。
运行上述代码,输出结果如注释所示。