如何建立可管理的物件屬性?
阿新 • • 發佈:2020-07-22
需求:
在面向物件的程式設計中,我們把方法(函式)看作物件的介面,直接訪問物件的屬性可能是不安全的,或設計上不夠靈活。但是使用呼叫方法在形式上不如訪問屬性簡潔。
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)