#python
#python
Вопрос:
Рассмотрим этот декоратор:
from functools import wraps
def non_null(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("Test")
assert all(not a is None for a in args)
return func(*args, *kwargs)
return wrapper
Вокруг средства установки свойства функции класса:
@non_null
@foo.setter
def foo(self, argument):
print("Setting")
self._a = argument
Если используется декоратор non_null, ни функция, ни декоратор не вызываются.
Ответ №1:
Похоже, что @foo.setter
это должен быть самый внешний декоратор:
@foo.setter
@non_null
def foo(self, argument):
print("Setting")
self._a = argument
Я не смог найти ссылки на это в документации, но при изучении содержимого класса становится ясно, что если декоратор свойства не самый внешний, вы получаете только простой метод вместо свойства.
Комментарии:
1. Это решило проблему! Кстати, как именно вы это обнаружили?
2. При просмотре того, что было
foo
атрибутом класса, я увидел, что это больше не свойство, которое позволяет думать, чтоfoo.getter
не было обработано. И причиной мог быть только другой декоратор, поэтому я попытался изменить порядок…3. Спасибо за вашу помощь.