回想一下装饰者
@decorator(dec_args)
def foo(args):
pass
只是写作的语法糖
def foo(args):
pass
foo = decorator(dec_args)(foo)
因此,方法装饰器不可能导致将多个方法(或属性等)添加到类中.
另一种方法可能是注入属性的类装饰器:
def multi_property(prop, *names):
def inner(cls):
for name in names:
setattr(cls, name, property(lambda self, name=name: prop(self, name)))
return inner
@multi_property(prop, 'a', 'b')
class Test:
pass
然而,通常更清楚的是让每个属性都存在于类的主体内:
a = forward_property('ref', 'a')
b = forward_property('ref', 'b')
其中forward_property返回一个属性对象,适当地实现描述符协议.这对于文档和其他静态分析工具以及(通常)读者来说更友好.