Implementando un decorador para limitar setters.

Tengo una clase con un puñado de variables de instancia, que configuro mediante funciones decoradas con los decoradores @someinstancevariable.setter . ¿Cómo me aseguraría de que los valores establecidos tengan un valor máximo y un valor mínimo para poder establecerlos? ¿Y necesitaría tener varios decoradores para esto o hay alguna manera de usar el decorador regular @someinstancevariable.setter y anularlo?

Tenga en cuenta que la property es realmente una implementación específica de un descriptor , y usted puede hacer su propio rollo:

 class ValidRange(object): def __init__(self, name, min_, max_): self._min = min_ self._max = max_ self._name = name def __get__(self, instance, owner): return getattr(instance, self._name) def __set__(self, instance, value): setattr(instance, self._name, min(self._max, max(value, self._min))) def __delete__(self, instance): delattr(instance, self.name) 

Esto sería usado como:

 >>> class Weather(object): ... temperature = ValidRange('_temp', 0, 100) ... >>> w = Weather() >>> w.temperature = 120 >>> w.temperature 100 

He publicado un método de descriptor más sofisticado aquí con la configuración automática de name