property内置装饰器函数和@name.setter、@name.deleter
1. 作用
@property 可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候 setter/deleter 也是需要的。
1、只有 @property 表示 只读 。
2、同时有 @property 和 @*.setter 表示 可读可写 。
3、同时有 @property 和 @*.setter 和 @*.deleter 表示可读可写可删除。
2. 实现
class Result:
def __init__(self):
self.__data = [11, 33, 44, 55, 66]
self.__pass_score = 60
@property
def data(self):
return self.__data
@property
def total(self):
total_ = 0
for value in self.__data:
total_ += value
return total_
@property
def passCount(self):
count = 0
for value in self.__data:
if value >= self.__pass_score:
count += 1
return count
@property
def passScore(self):
return self.__pass_score
@passScore.setter
def passScore(self, value):
if not 0 < value < 100:
raise ValueError('必须为1~99的数')
self.__pass_score = value
@passScore.deleter
def passScore(self):
del self.__pass_score
result = Result
data = result.data
total = result.total
result.passScore = 90
del result.passScore
3. 举例
class circular(object):
def __init__(self, radius):
self.__radius = radius
@property
def perimeter(self):
return 2 * pi * self.__radius
@perimeter.setter
def perimeter(self, value):
self.__radius = value
@perimeter.deleter
def perimeter(self):
del self.__radius
@property
def area(self):
return pi * self.__radius ** 2
@area.deleter
def area(self):
del self.area
circular = circular(10)
perimeter = circular.perimeter
area = circular.area
circular.perimeter = 20
del circular.perimeter
print(circular.perimeter)