1. 程式人生 > >面向物件-特性property

面向物件-特性property

什麼是特性property
property是一種特殊的屬性,訪問它時會執行一段功能(函式)然後返回值
例一:BMI指數(bmi是計算而來的,但很明顯它聽起來像是一個屬性而非方法,如果我們將其做成一個屬性,更便於理解)
成人的BMI數值:
過輕:低於18.5
正常:18.5-23.9
過重:24-27
肥胖:28-32
非常肥胖, 高於32
體質指數(BMI)=體重(kg)÷身高^2(m)
class People:
    def __init__(self,name,weight,height):
        self.name=name
        self.weight=weight
        self.height
=height @property #加上這個裝飾器 def bmi(self): return self.weight / (self.height **2 ) p1=People('egon',75,1.81) print(p1.bmi) # 呼叫函式直接 列印函式名,不用加括號了 #實際上是一個方法 不可以 做屬性的再賦值

 

class People:
    def __init__(self,name):
        self.__name=name

    @property    #調取
    def
name(self): print('getter') return self.__name @name.setter #賦值 def name(self,val): print('setter',val) if not isinstance(val,str): print('名字必須是字串') return self.__name=val @name.deleter def name(self): print
('deleter') print('不允許刪除') p=People('egon') print(p.name) p.name='EGON'
為什麼要用property
將一個類的函式定義成特性以後,物件再去使用的時候obj.name,
根本無法察覺自己的name是執行了一個函式然後計算出來的,
這種特性的使用方式遵循了統一訪問的原則