property屬性

property屬性

什么是property屬性?

一種用起來像是使用的實(shí)例屬性一樣的特殊屬性 .property屬性的定義和調(diào)用要注意一下幾點(diǎn):
定義時(shí)使套,在實(shí)例方法的基礎(chǔ)上添加 @property 裝飾器;并且僅有一個(gè)self參數(shù)
調(diào)用時(shí)捣染,無需括號(hào)
Python的property屬性的功能是:property屬性內(nèi)部進(jìn)行一系列的邏輯計(jì)算,最終將計(jì)算結(jié)果返回停巷。
property屬性的實(shí)現(xiàn)有兩種方式
裝飾器 即:在方法上應(yīng)用裝飾器
類屬性 即:在類中定義值為property對(duì)象的類屬性

1. 裝飾器方式

在類的實(shí)例方法上應(yīng)用@property裝飾器
Python中的類有經(jīng)典類和新式類耍攘,新式類的屬性比經(jīng)典類的屬性豐富。( 如果類繼object畔勤,那么該類是新式類,python3均為新式類蕾各,python2中繼承了object的類為新式類 )
經(jīng)典類,具有一種@property裝飾器

# ############### 定義 ###############    
class Goods:
    @property
    def price(self):
        return "10"
# ############### 調(diào)用 ###############
obj = Goods()
result = obj.price  # 自動(dòng)執(zhí)行 @property 修飾的 price 方法庆揪,并獲取方法的返回值
print(result)

新式類示损,具有三種@property裝飾器

# ############### 定義 ###############
class Goods:
    """python3中默認(rèn)繼承object類
        以python2、3執(zhí)行此程序的結(jié)果不同嚷硫,因?yàn)橹挥性趐ython3中才有@xxx.setter  @xxx.deleter
    """
    @property
    def price(self):
        print('@property')

    @price.setter
    def price(self, value):
        print('@price.setter')

    @price.deleter
    def price(self):
        print('@price.deleter')

# ############### 調(diào)用 ###############
obj = Goods()
obj.price          # 自動(dòng)執(zhí)行 @property 修飾的 price 方法检访,并獲取方法的返回值
obj.price = 123    # 自動(dòng)執(zhí)行 @price.setter 修飾的 price 方法始鱼,并將  123 賦值給方法的參數(shù)
del obj.price      # 自動(dòng)執(zhí)行 @price.deleter 修飾的 price 方法

總結(jié)

經(jīng)典類中的屬性只有一種訪問方式,其對(duì)應(yīng)被 @property 修飾的方法
新式類中的屬性有三種訪問方式脆贵,并分別對(duì)應(yīng)了三個(gè)被@property医清、@方法名.setter、@方法名.deleter修飾的方法
由于新式類中具有三種訪問方式卖氨,我們可以根據(jù)它們幾個(gè)屬性的訪問特點(diǎn)会烙,分別將三個(gè)方法定義為對(duì)同一個(gè)屬性:獲取、修改筒捺、刪除

2. 類屬性方式柏腻,創(chuàng)建值為property對(duì)象的類屬性

當(dāng)使用類屬性的方式創(chuàng)建property屬性時(shí),經(jīng)典類和新式類無區(qū)別
property方法中有個(gè)四個(gè)參數(shù)

  • 第一個(gè)參數(shù)是方法名系吭,調(diào)用 對(duì)象.屬性 時(shí)自動(dòng)觸發(fā)執(zhí)行方法
  • 第二個(gè)參數(shù)是方法名五嫂,調(diào)用 對(duì)象.屬性 = XXX 時(shí)自動(dòng)觸發(fā)執(zhí)行方法
  • 第三個(gè)參數(shù)是方法名,調(diào)用 del 對(duì)象.屬性 時(shí)自動(dòng)觸發(fā)執(zhí)行方法
  • 第四個(gè)參數(shù)是字符串肯尺,調(diào)用 對(duì)象.屬性.doc 沃缘,此參數(shù)是該屬性的描述信息
class Foo(object):
    def get_bar(self):
        print("getter...")
        return '100'

    def set_bar(self, value): 
        """必須兩個(gè)參數(shù)"""
        print("setter...")
        return 'set value' + value

    def del_bar(self):
        print("deleter...")
        return '100'
    # 類屬性方式, 創(chuàng)建值為property對(duì)象的類屬性
    BAR = property(get_bar, set_bar, del_bar, "description...")

obj = Foo()

obj.BAR  # 自動(dòng)調(diào)用第一個(gè)參數(shù)中定義的方法:get_bar
obj.BAR = "alex"  # 自動(dòng)調(diào)用第二個(gè)參數(shù)中定義的方法:set_bar方法,并將“alex”當(dāng)作參數(shù)傳入
desc = Foo.BAR.__doc__  # 自動(dòng)獲取第四個(gè)參數(shù)中設(shè)置的值:description...
print(desc)
del obj.BAR  # 自動(dòng)調(diào)用第三個(gè)參數(shù)中定義的方法:del_bar方法

總結(jié)

由于類屬性方式創(chuàng)建property屬性具有3種訪問方式则吟,我們可以根據(jù)它們幾個(gè)屬性的訪問特點(diǎn)槐臀,分別將三個(gè)方法定義為對(duì)同一個(gè)屬性:獲取、修改氓仲、刪除

綜上所述:

定義property屬性共有兩種方式水慨,分別是【裝飾器】和【類屬性】
【裝飾器】方式針對(duì)經(jīng)典類和新式類又有所不同。
經(jīng)典類中的屬性只有一種訪問方式敬扛,其對(duì)應(yīng)被 @property 修飾的方法
新式類中的屬性有三種訪問方式讥巡,并分別對(duì)應(yīng)了三個(gè)被@property、@方法名.setter舔哪、@方法名.deleter修飾的方法
當(dāng)使用【類屬性】的方式創(chuàng)建property屬性時(shí)欢顷,經(jīng)典類和新式類無區(qū)別
通過使用property屬性,能夠簡化調(diào)用者在獲取數(shù)據(jù)的流程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捉蚤,一起剝皮案震驚了整個(gè)濱河市抬驴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缆巧,老刑警劉巖布持,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異陕悬,居然都是意外死亡题暖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胧卤,“玉大人唯绍,你說我怎么就攤上這事≈μ埽” “怎么了况芒?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叶撒。 經(jīng)常有香客問我绝骚,道長,這世上最難降的妖魔是什么祠够? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任压汪,我火速辦了婚禮,結(jié)果婚禮上古瓤,老公的妹妹穿的比我還像新娘止剖。我一直安慰自己,他們只是感情好湿滓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布滴须。 她就那樣靜靜地躺著舌狗,像睡著了一般叽奥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痛侍,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天朝氓,我揣著相機(jī)與錄音,去河邊找鬼主届。 笑死赵哲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的君丁。 我是一名探鬼主播枫夺,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼绘闷!你這毒婦竟也來了蜕劝?” 一聲冷哼從身側(cè)響起梯啤,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后嗤朴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡场仲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年橄唬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡强挫,死狀恐怖岔霸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纠拔,我是刑警寧澤秉剑,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站稠诲,受9級(jí)特大地震影響侦鹏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜臀叙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一略水、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧劝萤,春花似錦渊涝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至厌处,卻和暖如春鳖谈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阔涉。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工缆娃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瑰排。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓贯要,卻偏偏與公主長得像,于是被迫代替她去往敵國和親椭住。 傳聞我的和親對(duì)象是個(gè)殘疾皇子崇渗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容