1

哪种是使用 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声明以来,相同功能的两种方式让我感到困惑

应该有一种——最好只有一种——明显的方法来做到这一点。

4

1 回答 1

3

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

@some_decorator
def some_func():
    ...

……相当于……

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

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

于 2012-12-20T23:28:31.260 回答