property 1
n.→ 属性
所有物,财产;地产,房地产;房地产股票(或投资)(properties);<法律> 所有权,处置权;特性,性质
property函数字如其名,其在装饰器的主要应用在于,我们要实现
-
保护类的封装特性
-
让开发者可以使用“对象.属性”的方式操作操作类属性的功能
除了使用 property() 函数,还可以使用 @property 装饰器。通过 @property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对“()”小括号。
简洁的说明@property
语法
@property
def func(self):
"do something better"
示例1:
class Rect:
def __init__(self,area):
self._area = area
@property
def area(self):
return self._area
rect = Rect(30) #直接通过方法名来访问 area 方法
print("矩形的面积是:",rect.area)
>>> 矩形的面积为:30
在示例1中如果类中只包含该方法,无法对 area 属性重新赋值,
而要想实现修改 area 属性的值,还需要为 area 属性添加 setter 方法,就需要用到 setter 装饰器,它的语法格式如下:
@func.setter
def func(self, value):
"do something better"
示例2:
class Rect:
def __init__(self,area):
self._area = area
@property
def area(self):
return self._area
@area.setter
def area(self, value):
self._area = value
rect = Rect(30) #直接通过方法名来访问 area 方法
print("矩形的面积是:",rect.area)
>>> 矩形的面积为:30
rect.area = 90 # 重新赋值
print("矩形的面积是:",rect.area)
>>> 矩形的面积为:90
除此以外,还可以使用deleter装饰器来删除指定属性:
示例3:
class Rect:
def __init__(self,area):
self._area = area
@property
def area(self):
return self._area
@area.setter
def area(self, value):
self._area = value
@area.deleter
def area(self):
self._area = 0
rect = Rect(30) #直接通过方法名来访问 area 方法
print("矩形的面积是:",rect.area)
>>> 矩形的面积为:30
rect.area = 90 # 重新赋值
print("矩形的面积是:",rect.area)
>>> 矩形的面积为:90
del rect.area # 删除属性
print("矩形的面积是:",rect.area)
>>> 矩形的面积为:0
/ˈprɑːpərti ↩︎