gpt4 book ai didi

python - Python中许多属性的装饰器

转载 作者:太空狗 更新时间:2023-10-30 02:22:13 26 4
gpt4 key购买 nike

是否可以编写一次创建多个属性的装饰器?

喜欢而不是写作

class Test:
@property
def a(self):
return self.ref.a
@property
def b(self):
return self.ref.b

我想写

class Test:
@properties("a", "b")
def prop(self, name):
return getattr(self.ref, name)

这可能吗?你推荐吗?

最佳答案

回想一下装饰器

@decorator(dec_args)
def foo(args):
pass

只是写作的语法糖

def foo(args):
pass
foo = decorator(dec_args)(foo)

因此,一个方法装饰器不可能导致一个以上的方法(或属性等)被添加到一个类中。

另一种可能是注入(inject)属性的类装饰器:

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 返回一个适当的属性对象来实现描述符协议(protocol)。这对文档和其他静态分析工具以及(通常)读者更友好。

关于python - Python中许多属性的装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11828338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com