什么是python類屬性
首先我們來看一下屬性的定義
屬性的定義:python中的屬性其實是普通方法的衍生。
操作類屬性有三種方法:
1.使用@property裝飾器操作類屬性。
2.使用類或?qū)嵗苯硬僮黝悓傩裕ɡ纾簅bj.name,obj.age=18,del obj.age)
3.使用python內(nèi)置函數(shù)操作屬性。
屬性存在的意義:
1、訪問屬性時可以制造出和訪問字段完全相同的假象,屬性由方法衍生而來,如果Python中沒有屬性,方法完全可以代替其功能。
2、定義屬性可以動態(tài)獲取某個屬性值,屬性值由屬性對應(yīng)的方式實現(xiàn),應(yīng)用更靈活。
3、可以制定自己的屬性規(guī)則,用于防止他人隨意修改屬性值。
下面詳細介紹三種操作類屬性的方法:
1.使用@property裝飾器操作類屬性。
定義時,在普通方法的基礎(chǔ)上添加@property裝飾器;屬性僅有一個self參數(shù),調(diào)用時無需括號;
優(yōu)點:
1) @property裝飾器可以實現(xiàn)其他語言所擁有的getter,setter和deleter的功能(例如實現(xiàn)獲取,設(shè)置,刪除隱藏的屬性)
2) 通過@property裝飾器可以對屬性的取值和賦值加以控制,提高代碼的穩(wěn)定性。
實例代碼1:
#encoding=utf-8
class Goods(): #新式類
@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# 自動執(zhí)行 @property 修飾的 price 方法,并獲取方法的返回值
obj.price = 2000 # 自動執(zhí)行 @price.setter 修飾的 price 方法,并將2000賦值給方法的參數(shù)
del obj.price # 自動執(zhí)行 @price.deleter 修飾的 price 方法
結(jié)果輸出:
@property
@price.setter
@price.deleter
實例代碼2:通過@property裝飾器對屬性的取值和賦值加以控制
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: #對屬性的取值和賦值加以控制
self.value=value
print (self.value)
else:
print ("請輸入一個50到100之間的數(shù)!")
@price.deleter # 刪除屬性(屬性名.deleter) 注意:屬性一旦刪除,就無法設(shè)置和獲取
def price(self):
del self.value
print ("price is deleted!")
obj = Goods()
print (obj.price) # 自動執(zhí)行 @property 修飾的 price 方法,并獲取方法的返回值
obj.price=106 # 自動執(zhí)行 @price.setter 修飾的 price 方法,并將106 賦值給方法
del obj.price # 自動執(zhí)行 @price.deleter 修飾的 price 方法
結(jié)果輸出:
50
請輸入一個50到100之間的數(shù)!
price is deleted!
實例擴展:
class Dog(object): name = 'dog' def init(self): self.age = 18 d1 = Dog() d2 = Dog()
這里有兩個實例 d1,d2 吧。
d1.name # 輸出 dogd2.name # 輸出 dogd1.name = 'abc' d1.name # 輸出 abcd2.name # 輸出 dogDog.name # 輸出 dog
原因是 d1.name 輸出 dog 不是因為這個實例共享了類屬性,而是因為這個實例沒有 dog 屬性,所以 python 查找了類屬性。但是一旦你修改了 d1.name 相當于給 d1 實例綁定了 name 屬性之后,d1.name 就與類屬性無關(guān)了。既然這樣就談不上實例之間共享類屬性了,因為只要一賦值,就相當于綁定了屬性,則上述 d1.name 的含義和 d2.name 的含義就不同了,它們的值也不同,很明顯它們的數(shù)據(jù)沒有共享。
到此這篇關(guān)于什么是python類屬性的文章就介紹到這了,更多相關(guān)python類屬性是什么內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python編程產(chǎn)生非均勻隨機數(shù)的幾種方法代碼分享
這篇文章主要介紹了Python編程產(chǎn)生非均勻隨機數(shù)的幾種方法代碼分享,具有一定借鑒價值,需要的朋友可以參考下。2017-12-12
以tensorflow庫為例講解Pycharm中如何更新第三方庫
這篇文章主要介紹了以tensorflow庫為例講解Pycharm中如何更新第三方庫,文章介紹有詳細流程,需要的小伙伴可以參考一下,希望對你的學習工作有所幫助2022-03-03
Python使用jupyter notebook查看ipynb文件過程解析
這篇文章主要介紹了Python使用jupyter notebook查看ipynb文件過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06
Python實現(xiàn)圖片轉(zhuǎn)字符畫的示例代碼
本篇文章主要介紹了Python實現(xiàn)圖片轉(zhuǎn)字符畫的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08

