我有一些类,每个类都有许多属性。所有属性的共同之处在于它们应该是数字属性。这似乎是使用Python装饰器的理想场所,但我无法理解正确的实现方式。下面是一个简单的示例:
class Junk(object):
def __init__(self, var):
self._var = var
@property
def var(self):
"""A numeric variable"""
return self._var
@var.setter
def size(self, value):
# need to make sure var is an integer
if not isinstance(value, int):
raise ValueError("var must be an integer, var = {}".format(value))
self._var = value
@var.deleter
def size(self):
raise RuntimeError("You can't delete var")
我认为应该可以编写一个装饰器,使得上述内容能够转换成以下形式:
def numeric_property(*args, **kwargs):
...
class Junk(object):
def __init__(self, var):
self._var = var
@numeric_property
def var(self):
"""A numeric variable"""
return self._var
这样新的numeric_property
装饰器就可以在许多类中使用。
numeric_property
成为一个装饰器呢?为什么不只是一个返回属性的函数,这样你在类定义中只需要写var = numeric_property('_var')
就可以了呢?(如果你想的话,你可以让它接受文档字符串作为另一个参数。) - BrenBarn