需求:
在面向对象的编程中,我们把方法(函数)看作对象的接口,直接访问对象的属性可能是不安全的,或设计上不够灵活。但是使用调用方法在形式上不如访问属性简洁。
circle.getRadius()
circle.setRadius(5.0) # 繁
circle.radius
circle.radius = 5.0 # 简
能否在形式上是属性的访问,但是实际调用方法?
思路:
使用property函数为类创建可管理属性,fget/fset/fdel对相应属性访问
代码:
from math import pi
class Circle(object):
def __init__(self,radius):
self.radius = radius
def getRadius(self):
return self.radius
def setRadius(self,value):
if not isinstance(value,(int,float)):
raise ValueError(‘wrong type‘)
self.radius = float(value)
def getArea(self):
return self.radius ** 2 * pi
R = property(getRadius, setRadius) # 第一个参数为c.R的时候调用的方法,第二个参数为c.R=xxx时调用的方法
c = Circle(3.2)
print(c.R)
c.R = ‘abc‘
print(c.R)
原文:https://www.cnblogs.com/Richardo-M-Q/p/13363434.html