property是Python类中的一个非常实用的语法,其主要用于将一些原本需要通过复杂计算而不是直接保存为属性的结果值,变得像属性一样可以直接访问,而不是表现为一个函数调用;同时,还用于将一些原本需要通过调用函数进行一系列复杂操作才能够设定完成的值,变得像普通属性一样可以用赋值号进行直接设定,从而隐藏许多在外部调用时程序内部的细节。
property由property、setter、deleter三个装饰器构成,其中deleter用于析构,本文不做详细讨论。
下例通过一个简单的坐标类来讨论这两个装饰器:
class Coord:
def __init__(self, x, y):
self.x = x
self.y = y
@property
def coord(self):
return (self.x, self.y)
@coord.setter
def coord(self, coordTuple):
self.x, self.y = coordTuple
coord = Coord(3, 4)
print(coord.coord)
coord.coord = (1, 2)
print(coord.coord)
上述代码定义了一个坐标类。其通过@property装饰器定义了两个方法,其中,如果需要使得一个函数调用变得像是属性访问,则首先需要定义一个用@property装饰的方法,此方法的方法名就是外部访问时的属性名;其次,如果还要对当前的property装饰器定义的属性进行修改操作,则使用名为“方法名.setter”的装饰器,再定义一个同名方法,这个方法接受两个参数,其第二参数就是外部赋值时的等号右值。
2018年6月于苏州