我一直在阅读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
答案 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