【发布时间】:2018-10-25 15:24:24
【问题描述】:
我想创建一个自定义 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 装饰器的声明,但它被定义为一个类并且没有多大帮助。
有什么建议吗?
【问题讨论】:
标签: python decorator python-decorators