python_如何創建可管理的對象屬性
案例:
在面向對象編程中,我們把方法作為對象的接口,自己訪問對象的屬性可能是不安全的,或設計上不靈活,但是使用調用方法在形式上不如訪問屬性簡潔
繁:
circle.getRadius()
circle.setRadius(5.0)
#!/usr/bin/python3 from math import pi class Circle(): def __init__(self, radius): self.radius = radius # 獲取半徑接口 def get_radius(self): return self.radius # 設置半徑接口 def set_radius(self, value): if isinstance(value, (int, float)): self.radius = float(value) else: raise ValueError(‘wrong type‘) # 獲取面積接口 def get_area(self): return round(self.radius ** 2 * pi, 2) if __name__ == ‘__main__‘: c = Circle(3.0) print(c.get_area()) # 設置半徑 c.set_radius(5.0) print(c.get_radius(), c.get_area())
簡:
circle.radius
circle.radius = 5.0
第二種方式看起來更加舒服簡潔,如何實現?
如何實現?
- 通過類裝飾器property,把類方法,變成類似屬性一樣
# !/usr/bin/python3 from math import pi class Circle(): def __init__(self, radius): self.radius = radius # 獲取半徑 @property def get_radius(self): return self.radius # 獲取面積 @property def get_area(self): return round(self.radius ** 2 * pi, 2) # 設置半徑值,指明為get_area函數設置值,但是給哪個函數設置值無關緊要,只要是類屬性,其他函數都可以訪問 @get_area.setter def set_radius(self, value): if isinstance(value, (int, float)): self.radius = float(value) else: raise ValueError(‘wrong type‘) if __name__ == ‘__main__‘: c = Circle(3.0) print(c.get_area) c.set_radius = 5.0 print(c.get_radius, c.get_area)
- 通過內置property方法
# !/usr/bin/python3 from math import pi class Circle(): def __init__(self, radius): self.radius = radius # 獲取半徑 def get_radius(self): return self.radius # 獲取面積 def get_area(self): return round(self.radius ** 2 * pi, 2) # 設置半徑值, def set_radius(self, value): if isinstance(value, (int, float)): self.radius = float(value) else: raise ValueError(‘wrong type‘) # obj.R 調用第一個函數,obj = 5.0 調用第二個函數,進行設置值,[email protected]
python_如何創建可管理的對象屬性