我为什么要在python中使用@property装饰器?

时间:2017-08-25 13:59:18

标签: python class properties decorator

我一直在阅读python的教程书,并简要讨论了属性。根据我的理解,当请求类属性时,python将请求定向到返回属性的属性方法,以便在访问属性之前运行代码。但为什么这是必要的,在下面的例子中,返回的属性v甚至无法用点表示法访问?

@property
def value(self):
    if self.is_face_up:
        v = BJ_Card.RANKS.index(self.rank) + 1
        if v > 10:
            v = 10
    else:
        v = None
    return v 

1 个答案:

答案 0 :(得分:3)

无法使用函数中的点符号访问该属性,因为这会以递归方式调用属性getter并导致堆栈溢出:

class A:
    @property
    def x(self):
        return self.x # StackOverflow

但是,@property的全部内容正好,以便使用点表示法访问它。以下是等效的:

# Without @property
class A:
    def x(self):
        return 3

a = A()
print(a.x()) # prints 3

# With @property
class A:
    @property
    def x(self):
        return 3

a = A()
print(a.x) # prints 3