Я хотел бы создать собственный декоратор 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
декоратора, но он определен как класс и не сильно помог.
Есть предложения?