繁体   English   中英

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

[英]Why should I use the @property decorator in python?

我一直在阅读python教程书,其中简要讨论了属性。 据我了解,当请求一个类属性时,python将请求定向到返回该属性的property方法,以便可以在访问该属性之前运行代码。 但是,为什么在下面的示例中返回的属性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 

无法在函数内部使用点符号访问该属性,因为这将递归调用属性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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM