在面向对象中,通过这三个装饰器,将一个方法伪装成一个功能,在调用过程中更加方便.
- @property: 添加之后,调用函数时就可以不加 括号.
- @func.setter: 在使用@property的前提下,更改这个方法,在下面可以做出判断.
- @func.deleter: 删除时,执行下面的内容,一般将 del func写在下面,进行真的删除
# 求圆的周长
class Circle:
def __init__(self, r):
self.r = r
@property
def perimeter(self):
return 3.14 * self.r * 2
@perimeter.setter
def perimeter(self, per):
if type(per) is int:
r0 = per / 3.14 / 2
print('周长的值已更改,此时圆的半径为 %s' % r0)
# 修改圆的周长时执行本步骤,打印出修改后的圆的半径,本步骤可写判断
else:
print('周长应该是数字')
@perimeter.deleter
def perimeter(self):
del self.r
# 在下面执行 del c.perimeter 时,执行本步骤,删除半径
# 不能删除perimeter这个功能,会报错:
# RecursionError: maximum recursion depth exceeded
print('这个圆已经删除')
c = Circle(10)
print(c.perimeter)
c.perimeter = 628
del c.perimeter
print(c.__dict__)