您可以像这样编写等效的基于类的装饰器...
class addx:
def __new__(self,obj):
obj.x = 10
return obj
@addx
class A:
pass
assert A.x == 10
...但是我不认为这真的能给您带来任何好处。当您的目标是修改class A
的对象而不是class A
本身时,基于类的装饰器的实用性就变得更加明显。比较以下两个修饰符,一个基于函数,一个基于类:
def addx_func(kls):
def wrapper():
res = kls()
res.x = 10
return res
return wrapper
class addx_class:
def __init__(self,kls):
self.kls = kls
def __call__(self):
res = self.kls()
res.x = 10
return res
@addx_func
class A:
pass
@addx_class
class B:
pass
a = A()
assert a.x == 10
b = B()
assert b.x == 10
本文链接:https://www.f2er.com/2998718.html