<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
裝飾器:裝飾器是在不修改被裝飾物件原始碼以及呼叫方式的前提下為被裝飾物件新增新功能的可呼叫物件
property是一個裝飾器,是用來繫結給物件的方法偽造成一個資料屬性
裝飾器property,可以將類中的函數“偽裝成”物件的資料屬性,物件在存取該特殊屬性時會觸發功能的執行,然後將返回值作為本次存取的結果。
使用property有效地保證了屬性存取的一致性。另外property還提供設定和刪除屬性的功能
應用場景:有的功能屬性聽起來更像資料屬性,python則提供了一種裝飾器,可以將功能屬性偽裝成資料屬性
A、裝飾器方式
在類的方法上應用@property裝飾器,即上面那種方式。
B、類屬性方式
建立一個範例物件賦值給類屬性
>>> class Lemons(): def __init__(self,unit_price=7): self.unit_price = unit_price def get_unit_price(self): return self.unit_price def set_unit_price(self,new_unit_price): self.unit_price = new_unit_price def del_unit_price(self): del self.unit_price x = property(get_unit_price, set_unit_price, del_unit_price) >>> fruit = Lemons() >>> >>> fruit.x #呼叫 fruit.x 觸發 get_unit_price 7 >>> >>> fruit.x = 9 #呼叫 fruit.x = 9 觸發 set_unit_price >>> >>> fruit.x 9 >>> >>> fruit.unit_price #呼叫 fruit.unit_price 觸發 get_unit_price 9 >>> del fruit.x #呼叫 del fruit.x 觸發 del_unit_price >>> >>> fruit.unit_price Traceback (most recent call last): File "<pyshell#23>", line 1, in <module> l.unit_price AttributeError: 'Lemons' object has no attribute 'unit_price'
property方法可以接收四個引數
"""
成人的BMI數值:
過輕:低於18.5
正常:18.5-23.9
過重:24-27
肥胖:28-32
非常肥胖, 高於32
體質指數(BMI)=體重(kg)÷身高^2(m)
EX:70kg÷(1.75×1.75)=22.86
"""
案例一:
class People: def __init__(self, name, weight, height): self.name = name self.weight = weight self.height = height # 定義函數的原因1: # 1、從bmi的公式上看,bmi應該是觸發功能計算得到的 # 2、bmi是隨著身高、體重的變化而動態變化的,不是一個固定的值 # 說白了,每次都是需要臨時計算得到的 # 但是bmi聽起來更像是一個資料屬性,而非功能 @property def bmi(self): return self.weight / (self.height ** 2) obj1 = People('egon', 70, 1.83) print(obj1.bmi()) obj1.height=1.86 print(obj1.bmi()) print(obj1.bmi)
案例二:
''' 學習中遇到問題沒人解答?小編建立了一個Python學習交流群:711312441 尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教學和PDF電子書! ''' class People: def __init__(self, name): self.__name = name def get_name(self): return self.__name def set_name(self, val): if type(val) is not str: print('必須傳入str型別') return self.__name = val def del_name(self): print('不讓刪除') # del self.__name name=property(get_name,set_name,del_name) obj1=People('egon') # print(obj1.get_name()) # obj1.set_name('EGON') # print(obj1.get_name()) # obj1.del_name() # 人正常的思維邏輯 print(obj1.name) # # obj1.name=18 # del obj1.name
案例三:
class People: def __init__(self, name): self.__name = name @property def name(self): # obj1.name return self.__name @name.setter def name(self, val): # obj1.name='EGON' if type(val) is not str: print('必須傳入str型別') return self.__name = val @name.deleter def name(self): # del obj1.name print('不讓刪除') # del self.__name obj1=People('egon') # 人正常的思維邏輯 print(obj1.name) # # obj1.name=18 # del obj1.name
到此這篇關於Python property裝飾器使用案例介紹的文章就介紹到這了,更多相關Python property內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45