python 7-4 如何創建可管理的對象屬性R = property(getRadius,setRadius)或者@property @radius.setter

python 7-4 如何創建可管理的對象屬性R = property(getRadius,setRadius)或者@property @radius.setter

解決方案:
1.
使用property函數爲類創建可管理屬性,fget/fset/fdel對應的屬性訪問
R = property(getRadius,setRadius)

c2=Circle(1.0)
c2.R=2.0
print c2.getArea()

2.
使用propery裝飾器

@property
def radius(self):
    return self._radius

@radius.setter
def radius(self,value):
    if not isinstance(value,(int,long,float)):
        raise ValueError('wrong type.')
    self._radius = float(value)

解決方案1:

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,long,float)):
            raise ValueError('wrong type.')
        self.radius = float(value)

    def getArea(self):
        return self.radius **2 *pi

    R = property(getRadius,setRadius)

c2=Circle(1.0)
c2.R=2.0
print c2.getArea()

解決方案2:

from math import pi
class Circle(object):
    def __init__(self,radius):
        self._radius = radius

    @property
    def radius(self):
        return self._radius

    @radius.setter
    def radius(self,value):
        if not isinstance(value,(int,long,float)):
            raise ValueError('wrong type.')
        self._radius = float(value)

    def getArea(self):
        return self._radius **2 *pi

c=Circle(3.2)
c.radius=ord('1')   ==>1的ascii的值
print c.getArea()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章