gpt4 book ai didi

python - 行为类似于 @property 的自定义 python 属性装饰器

转载 作者:行者123 更新时间:2023-12-04 14:23:44 26 4
gpt4 key购买 nike

我想创建一个自定义 Python 装饰器,它将 1) 检查类属性的值 my_attribute在运行该函数之前,以及 2) 将类方法转换为属性。我可以按如下方式实现:

def my_decorator(f):
def wrapper(self, *args, **kwargs):
if self.my_attribute is None:
raise ValueError('No location set to model.')

return f(self, *args, **kwargs)
return wrapper

class MyClass:
my_attribute = None

@property
@my_decorator
def my_method():
return self. my_attribute

我想知道如何编辑 my_decorator 的定义以便它使包装的方法成为一个属性。基本上我想避免使用 @property@my_decorator对于每种方法,让我将类定义写为
class MyClass:
my_attribute = None

@my_new_decorator
def my_method():
return self. my_attribute

我查了一下内置函数的声明 @property装饰器,但它被定义为一个类,并没有太大帮助。

有什么建议?

最佳答案

如果您将装饰器定义更改为如下所示怎么办?

def my_decorator(f):
@property
def wrapper(self, *args, **kwargs):
if self.my_attribute is None:
raise ValueError('No location set to model.')

return f(self, *args, **kwargs)
return wrapper

这应该使返回的函数表现得像一个属性,并保持您的自定义错误处理。

希望这有帮助!

关于python - 行为类似于 @property 的自定义 python 属性装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50356207/

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