实现一个decorator来限制setters

2024-10-03 02:47:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含少量实例变量的类,我通过用@someinstancevariable.setter修饰符修饰的函数来设置这些变量。如何确保设置的值有一个可以设置的最大值和最小值?我需要有多个decorator吗?或者有什么方法可以使用常规的@someinstancevariable.setterdecorator并重写它?你知道吗


Tags: 实例方法函数decorator修饰符常规settersetterdecorator
1条回答
网友
1楼 · 发布于 2024-10-03 02:47:03

请注意,property实际上是descriptor的一个特定实现,您可以使用自己的实现:

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)

其用法如下:

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

我发布了一个更奇特的描述符方法here,带有自动name设置。。。你知道吗

相关问题 更多 >