从本质上讲,@property是一个语法糖。语法糖是python里老生常谈的事务了,比方说,最基础的len(iterable)函数,其实是通过调用iterable.__len__()方法实现的。只是pythonic的理念让我们习惯并且喜欢上使用诸如func()的方法。而@property也是一个语法糖。本文旨在简要介绍这一类语法糖。
其实,各个python教程里都会说明,@符号在python中常用的部分是装饰器。有关装饰器的详细介绍参考如下链接
Python 函数装饰器 | 菜鸟教程 (runoob.com)
@property有什么用呢?表面看来,就是将一个方法用属性的方式来访问.
为介绍@property,我们先初始化如下简要代码:
# @property有什么用呢?表面看来,就是将一个方法用属性的方式来访问.
class Circle:
def __init__(self, radius):
self.radius = radius
@property
def area(self):
return 3.1416 * self.radius ** 2
c = Circle(4) # 初始化一个Circle类的实例
print(c.radius)
print(c.area)
本例中,Circle是一个类,而radius显然是一个基于__init__函数定义的属性,同时,area虽然是一个函数,但是由于申明了@property这句话,这使得Ciucle().area成为该类(实例)的属性。事实上,对于Circle类,由于未实例化,Circle.radius是没有意义的,但是Circle.area是有意义的,这是由于__init__里的部分是只有实例化才可以正常享用的,而Circle.area本质上是一个函数,只是python通过其内置的方法,约定俗成将其称为
综上所述,area虽然是定义成一个方法的形式,但是加上@property后,可以直接c.area,当成属性访问。事实上,@property的真实调用是在property函数中将其下一行def的函数作为输入变量,为下一行的函数增加功能。