什么是python類(lèi)屬性
首先我們來(lái)看一下屬性的定義
屬性的定義:python中的屬性其實(shí)是普通方法的衍生。
操作類(lèi)屬性有三種方法:
1.使用@property裝飾器操作類(lèi)屬性。
2.使用類(lèi)或?qū)嵗苯硬僮黝?lèi)屬性(例如:obj.name,obj.age=18,del obj.age)
3.使用python內(nèi)置函數(shù)操作屬性。
屬性存在的意義:
1、訪(fǎng)問(wèn)屬性時(shí)可以制造出和訪(fǎng)問(wèn)字段完全相同的假象,屬性由方法衍生而來(lái),如果Python中沒(méi)有屬性,方法完全可以代替其功能。
2、定義屬性可以動(dòng)態(tài)獲取某個(gè)屬性值,屬性值由屬性對(duì)應(yīng)的方式實(shí)現(xiàn),應(yīng)用更靈活。
3、可以制定自己的屬性規(guī)則,用于防止他人隨意修改屬性值。
下面詳細(xì)介紹三種操作類(lèi)屬性的方法:
1.使用@property裝飾器操作類(lèi)屬性。
定義時(shí),在普通方法的基礎(chǔ)上添加@property裝飾器;屬性?xún)H有一個(gè)self參數(shù),調(diào)用時(shí)無(wú)需括號(hào);
優(yōu)點(diǎn):
1) @property裝飾器可以實(shí)現(xiàn)其他語(yǔ)言所擁有的getter,setter和deleter的功能(例如實(shí)現(xiàn)獲取,設(shè)置,刪除隱藏的屬性)
2) 通過(guò)@property裝飾器可以對(duì)屬性的取值和賦值加以控制,提高代碼的穩(wěn)定性。
實(shí)例代碼1:
#encoding=utf-8 class Goods(): #新式類(lèi) @property def price(self): #查看屬性值 print ('@property ') @price.setter #修改、設(shè)置屬性 def price(self, value): print ('@price.setter' ) @price.deleter#刪除屬性 def price(self): print ('@price.deleter') obj = Goods(50) obj.price# 自動(dòng)執(zhí)行 @property 修飾的 price 方法,并獲取方法的返回值 obj.price = 2000 # 自動(dòng)執(zhí)行 @price.setter 修飾的 price 方法,并將2000賦值給方法的參數(shù) del obj.price # 自動(dòng)執(zhí)行 @price.deleter 修飾的 price 方法 結(jié)果輸出: @property @price.setter @price.deleter
實(shí)例代碼2:通過(guò)@property裝飾器對(duì)屬性的取值和賦值加以控制
class Goods(object): def __init__(self): self.value=50 @property def price(self): # 查看屬性 return self.value @price.setter # 添加或設(shè)置屬性(屬性名.setter) def price(self, value): if value >=50 and value<=100: #對(duì)屬性的取值和賦值加以控制 self.value=value print (self.value) else: print ("請(qǐng)輸入一個(gè)50到100之間的數(shù)!") @price.deleter # 刪除屬性(屬性名.deleter) 注意:屬性一旦刪除,就無(wú)法設(shè)置和獲取 def price(self): del self.value print ("price is deleted!") obj = Goods() print (obj.price) # 自動(dòng)執(zhí)行 @property 修飾的 price 方法,并獲取方法的返回值 obj.price=106 # 自動(dòng)執(zhí)行 @price.setter 修飾的 price 方法,并將106 賦值給方法 del obj.price # 自動(dòng)執(zhí)行 @price.deleter 修飾的 price 方法 結(jié)果輸出: 50 請(qǐng)輸入一個(gè)50到100之間的數(shù)! price is deleted!
實(shí)例擴(kuò)展:
class Dog(object): name = 'dog' def init(self): self.age = 18 d1 = Dog() d2 = Dog()
這里有兩個(gè)實(shí)例 d1,d2 吧。
d1.name # 輸出 dogd2.name # 輸出 dogd1.name = 'abc' d1.name # 輸出 abcd2.name # 輸出 dogDog.name # 輸出 dog
原因是 d1.name 輸出 dog 不是因?yàn)檫@個(gè)實(shí)例共享了類(lèi)屬性,而是因?yàn)檫@個(gè)實(shí)例沒(méi)有 dog 屬性,所以 python 查找了類(lèi)屬性。但是一旦你修改了 d1.name 相當(dāng)于給 d1 實(shí)例綁定了 name 屬性之后,d1.name 就與類(lèi)屬性無(wú)關(guān)了。既然這樣就談不上實(shí)例之間共享類(lèi)屬性了,因?yàn)橹灰毁x值,就相當(dāng)于綁定了屬性,則上述 d1.name 的含義和 d2.name 的含義就不同了,它們的值也不同,很明顯它們的數(shù)據(jù)沒(méi)有共享。
到此這篇關(guān)于什么是python類(lèi)屬性的文章就介紹到這了,更多相關(guān)python類(lèi)屬性是什么內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 實(shí)現(xiàn)超級(jí)瑪麗游戲
這篇文章主要介紹了python 實(shí)現(xiàn)超級(jí)瑪麗游戲,幫助大家更好的理解和使用python開(kāi)發(fā)游戲,感興趣的朋友可以了解下2020-11-11Pandas統(tǒng)計(jì)重復(fù)的列里面的值方法
今天小編就為大家分享一篇Pandas統(tǒng)計(jì)重復(fù)的列里面的值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01python數(shù)字類(lèi)型math庫(kù)原理解析
這篇文章主要介紹了python數(shù)字類(lèi)型math庫(kù)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03python 圖像判斷,清晰度(明暗),彩色與黑白實(shí)例
這篇文章主要介紹了python 圖像判斷,清晰度(明暗),彩色與黑白實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06Python編程產(chǎn)生非均勻隨機(jī)數(shù)的幾種方法代碼分享
這篇文章主要介紹了Python編程產(chǎn)生非均勻隨機(jī)數(shù)的幾種方法代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12以tensorflow庫(kù)為例講解Pycharm中如何更新第三方庫(kù)
這篇文章主要介紹了以tensorflow庫(kù)為例講解Pycharm中如何更新第三方庫(kù),文章介紹有詳細(xì)流程,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)工作有所幫助2022-03-03Python使用jupyter notebook查看ipynb文件過(guò)程解析
這篇文章主要介紹了Python使用jupyter notebook查看ipynb文件過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫(huà)的示例代碼
本篇文章主要介紹了Python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫(huà)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08Python高級(jí)過(guò)濾器之filter函數(shù)詳解
在Python中,filter()是一個(gè)非常有用的內(nèi)置函數(shù),它能夠根據(jù)指定的函數(shù)來(lái)篩選出可迭代對(duì)象中滿(mǎn)足條件的元素,本文將從入門(mén)到精通,全面介紹filter()函數(shù)的用法和相關(guān)知識(shí)點(diǎn)2023-08-08