[英]Django models: when should I use the @property decorator for attributes?
[英]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.