Python的property()应该用作装饰器还是保存到变量?

时间:2012-12-20 23:16:54

标签: python properties decorator

使用Python内置函数property()的首选方法是什么?作为装饰者还是保存到变量?

以下是将property()保存到变量color的示例。

class Train(object):
    def __init__(self, color='black'):
        self._color = color

    def get_color(self):
        return self._color

    def set_color(self, color):
        self._color = color

    def del_color(self):
        del self._color
    color = property(get_color, set_color, del_color)

这是相同的例子,但改为使用装饰器。

class Train(object):
    def __init__(self, color='black'):
        self._color = color

    @property
    def color(self):
        return self._color

    @color.setter
    def color(self, color):
        self._color = color

    @color.deleter
    def color(self):
        del self._color

我发现有些人喜欢将装饰器语法用于只读属性。例如。

class Train(object):
    def __init__(self, color='black'):
        self._color = color

    @property
    def color(self):
        return self._color

但是保存到变量时也可以实现相同的功能。

class Train(object):
    def __init__(self, color='black'):
        self._color = color

    def get_color(self):
        return self._color
    color = property(get_color)

相同功能的两种方式让我感到困惑,因为PEP20声明了

  

应该有一个 - 最好只有一个 - 显而易见的方法。

1 个答案:

答案 0 :(得分:3)

从功能上讲,这两种方式是等效的。装饰器语法只是语法糖。

@some_decorator
def some_func():
    ...

......等同于......

def some_func():
    ....
some_func = some_decorator(some_func)

装饰器语法使你的代码更清晰(非装饰器语法意味着你必须输入三次“some_func”!)并且你的意图更明显,所以我肯定会说使用装饰器语法。