1. 程式人生 > 實用技巧 >如何建立可管理的物件屬性?

如何建立可管理的物件屬性?

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