Python----面向对象---property的使用
生活随笔
收集整理的這篇文章主要介紹了
Python----面向对象---property的使用
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一個(gè)求BMI體質(zhì)指數(shù)的例子,代碼如下:
體質(zhì)指數(shù)(BMI)= 體重? / 身高 **2
1 class People: 2 def __init__(self, name, weight, height): 3 self.name = name 4 self.weight = weight 5 self.height = height 6 7 p = People('alex', 75, 1.81) 8 9 p.bmi = p.weight / (p.height ** 2) 10 print(p.bmi) 11 12 結(jié)果為: 13 14 22.89307408198773但是,這樣不夠靈活,我們對(duì)代碼做下更改:
如下:
1 class People: 2 def __init__(self, name, weight, height): 3 self.name = name 4 self.weight = weight 5 self.height = height 6 7 def bmi(self): 8 return self.weight / (self.height ** 2) 9 10 p = People('alex', 75, 1.81) 11 12 # p.bmi = p.weight / (p.height ** 2) 13 print(p.bmi()) 14 15 結(jié)果為: 16 17 22.89307408198773上述代碼一定程度上提高了靈活性,但是用戶的調(diào)用的時(shí)候是在調(diào)用一個(gè)方法區(qū)執(zhí)行,能不能讓用戶感覺就向在調(diào)一個(gè)數(shù)據(jù)屬性呢,答案是可以的,這就用到了property裝飾器
如下:
1 class People: 2 def __init__(self, name, weight, height): 3 self.name = name 4 self.weight = weight 5 self.height = height 6 7 @property 8 def bmi(self): 9 return self.weight / (self.height ** 2) 10 11 p = People('alex', 75, 1.81) 12 13 # p.bmi = p.weight / (p.height ** 2) 14 # print(p.bmi()) 15 print(p.bmi) 16 17 結(jié)果為: 18 19 22.89307408198773但是不能給p.bmi賦值,因?yàn)樗f到底還是一個(gè)方法,
二、給一個(gè)方法賦值,
l例如:
1 class People: 2 def __init__(self, name): 3 self.__name = name 4 5 @property 6 def name(self): 7 return self.__name 8 9 @name.setter 10 def name(self, val): 11 if not isinstance(val, str): 12 print('名字必須是字符串類型') 13 return 14 self.__name = val 15 16 p = People('egon') 17 p.name = 'EGON' 18 print(p.name) 19 20 結(jié)果為: 21 22 EGON這用到了name.setter 裝飾器,這是在property裝飾器的基礎(chǔ)之上實(shí)現(xiàn)的
當(dāng)然也可以刪除
例如
1 class People: 2 def __init__(self, name): 3 self.__name = name 4 5 @property 6 def name(self): 7 return self.__name 8 9 @name.setter 10 def name(self, val): 11 if not isinstance(val, str): 12 print('名字必須是字符串類型') 13 return 14 self.__name = val 15 16 @name.deleter 17 def name(self): 18 print('deleter') 19 20 print('不允許刪除') 21 22 p = People('egon') 23 # p.name = 'EGON' 24 # print(p.name) 25 26 del p.name 27 28 結(jié)果為: 29 30 deleter 31 不允許刪除?
轉(zhuǎn)載于:https://www.cnblogs.com/xudachen/p/8619891.html
總結(jié)
以上是生活随笔為你收集整理的Python----面向对象---property的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 互联网IP地址的分配
- 下一篇: jsp运算符