4:類對(duì)象和實(shí)例對(duì)象訪問屬性的區(qū)別和property屬性

一广鳍、再論靜態(tài)方法和類方法以及實(shí)例方法

1.1、類屬性、實(shí)例屬性

它們?cè)诙x和使用中有所區(qū)別,而最本質(zhì)的區(qū)別內(nèi)存中保存的位置不同

實(shí)例屬性屬于對(duì)象

類屬性屬于類

由上述代碼可以看出【實(shí)例屬性需要通過對(duì)象來訪問】【類屬性通過類訪問】筝闹,在使用上可以看出 實(shí)例屬性和類屬性的歸屬是不同的。 類屬性在內(nèi)存中只保存一份 實(shí)例屬性在每個(gè)對(duì)象中都要保存一份 應(yīng)用場(chǎng)景:通過類創(chuàng)建實(shí)例對(duì)象時(shí),如果每個(gè)對(duì)象需要具有相同名字的屬性关顷,那么就使用類屬性糊秆,用一份既可?

.2、實(shí)例方法议双、靜態(tài)方法和類方法(類里面的三種方法痘番,區(qū)別在于調(diào)用方式不同)

實(shí)例方法:由對(duì)象調(diào)用;至少一個(gè)self參數(shù)平痰;執(zhí)行實(shí)例方法時(shí)汞舱,自動(dòng)將調(diào)用該方法的對(duì)象賦值給self;

類方法:由類調(diào)用宗雇; 至少一個(gè)cls參數(shù)昂芜;執(zhí)行類方法時(shí),自動(dòng)將調(diào)用該方法的類賦值給cls逾礁;

靜態(tài)方法:由類調(diào)用;無默認(rèn)參數(shù)

class Foo(object):

? ? def __init__(self, name):

? ? ? ? ? self.name = name

def ord_func(self):

? ? """ 定義實(shí)例方法访惜,至少有一個(gè)self參數(shù) """

? ? # print(self.name)

? ? print('實(shí)例方法')

@classmethod

def class_func(cls):

? ? """ 定義類方法嘹履,至少有一個(gè)cls參數(shù) """

? ? print('類方法')

@staticmethod

def static_func():

? ? """ 定義靜態(tài)方法 ,無默認(rèn)參數(shù)"""

? ? print('靜態(tài)方法')

f = Foo("中國")

# 調(diào)用實(shí)例方法

f.ord_func()

# 調(diào)用類方法

Foo.class_func()

# 調(diào)用靜態(tài)方法

Foo.static_func()


相同點(diǎn):對(duì)于所有的方法而言债热,均屬于類砾嫉,所以 在內(nèi)存中也只保存一份

不同點(diǎn):方法調(diào)用者不同、調(diào)用方法時(shí)自動(dòng)傳入的參數(shù)不同窒篱。

二焕刮、property 屬性

2.1、什么是property屬性墙杯,在方法名的加上property就是?property屬性配并,在調(diào)用上?dog.run?優(yōu)于?dog.run() #類似與將方法轉(zhuǎn)化為屬性的方式


property屬性的定義和調(diào)用要注意一下幾點(diǎn):

定義時(shí),在實(shí)例方法的基礎(chǔ)上添加 @property 裝飾器高镐;并且僅有一個(gè)self參數(shù)

調(diào)用時(shí)溉旋,無需括號(hào)



2.2、property屬性有兩種方式

裝飾器即:在方法上應(yīng)用裝飾器

類屬性即:在類中定義值為property對(duì)象的類屬性

2.2.1嫉髓、裝飾器方式

在類的實(shí)例方法上應(yīng)用@property裝飾器观腊,Python中的類有經(jīng)典類和新式類,新式類的屬性比經(jīng)典類的屬性豐富算行。( 如果類繼object梧油,那么該類是新式類

經(jīng)典類,具有一種@property裝飾器

2.2.1州邢、裝飾器方式

在類的實(shí)例方法上應(yīng)用@property裝飾器儡陨,Python中的類有經(jīng)典類和新式類,新式類的屬性比經(jīng)典類的屬性豐富。( 如果類繼object迄委,那么該類是新式類

經(jīng)典類褐筛,具有一種@property裝飾器


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


由于新式類中具有三種訪問方式叙身,我們可以根據(jù)它們幾個(gè)屬性的訪問特點(diǎn)渔扎,分別將三個(gè)方法定義為對(duì)同一個(gè)屬性:獲取、修改信轿、刪除

class Goods(object):

? ? def __init__(self):

? ? ? ? # 原價(jià)

? ? ? ? self.original_price = 100

? ? ? ? # 折扣

? ? ? ? self.discount = 0.8

? ? @property

? ? def price(self):

? ? ? ? # 實(shí)際價(jià)格 = 原價(jià) * 折扣

? ? ? ? new_price = self.original_price * self.discount

? ? ? ? return new_price

? ? @price.setter

? ? def price(self, value):

? ? ? ? self.original_price = value

? ? @price.deleter

? ? def price(self):

? ? ? ? del self.original_price

obj = Goods()

obj.price? ? ? ? # 獲取商品價(jià)格

obj.price = 200? # 修改商品原價(jià)

del obj.price? ? # 刪除商品原價(jià)


2.2.2晃痴、類屬性 方式,創(chuàng)建值為property對(duì)象的類屬性,我比較喜歡這個(gè)方式

當(dāng)使用?類屬性?的方式創(chuàng)建?property屬性?時(shí)财忽,經(jīng)典類?和?新式類?無區(qū)別


property 方法中有個(gè) 四個(gè)參數(shù)

第 1 個(gè)參數(shù)是方法名倘核,調(diào)用 對(duì)象.屬性 時(shí)自動(dòng)觸發(fā)執(zhí)行方法

第 2 個(gè)參數(shù)是方法名,調(diào)用 對(duì)象.屬性 = XXX 時(shí)自動(dòng)觸發(fā)執(zhí)行方法

第 3 個(gè)參數(shù)是方法名即彪,調(diào)用 del 對(duì)象.屬性 時(shí)自動(dòng)觸發(fā)執(zhí)行方法

第 4 個(gè)參數(shù)是字符串紧唱,調(diào)用 對(duì)象.屬性.__doc__ ,此參數(shù)是該屬性的描述信息

class Person(object):

? ? def __init__(self,name):

? ? ? ? ? self.name = name

? ? def get_name(self):

? ? ? ? ? return self.name

? ? def set_name(self,new_name):

? ? ? ? ? self.name = new_name

? ? ? ? ? print("設(shè)置名字為:%s"%self.name)

? ? def del_name(self):

? ? ? ? ? del? self.name

? ? BAR = property(get_name,set_name,del_name,"價(jià)格信息...")

person = Person("小王")

person.BAR? ? ? # 自動(dòng)調(diào)用第一個(gè)參數(shù)中定義的方法:get_name

person.BAR = "小李" # 自動(dòng)調(diào)用第二個(gè)參數(shù)中定義的方法:set_name方法隶校,并將 "小李" 當(dāng)作參數(shù)傳入

person.del_name? # 自動(dòng)調(diào)用第三個(gè)參數(shù)中定義的方法:del_name方法

desc = Person.BAR.__doc__? # 自動(dòng)獲取第四個(gè)參數(shù)中設(shè)置的值:描述信息...

print("描述是:%s"%desc)

由于類屬性方式創(chuàng)建 property屬性 具有3種訪問方式漏益,我們可以根據(jù)它們幾個(gè)屬性的訪問特點(diǎn),分別將?三個(gè)方法定義為對(duì)同一個(gè)屬性:獲取深胳、修改绰疤、刪除,如下商品的價(jià)格

class Goods(object):

? ? def __init__(self):

? ? ? ? # 原價(jià)

? ? ? ? self.original_price = 100

? ? ? ? # 折扣

? ? ? ? self.discount = 0.8

? ? def get_price(self):

? ? ? ? # 實(shí)際價(jià)格 = 原價(jià) * 折扣

? ? ? ? new_price = self.original_price * self.discount

? ? ? ? return new_price

? ? def set_price(self, value):

? ? ? ? self.original_price = value

? ? def del_price(self):

? ? ? ? del self.original_price

? ? PRICE = property(get_price, set_price, del_price, '價(jià)格屬性描述...')

obj = Goods()

obj.PRICE? ? ? ? # 獲取商品價(jià)格

obj.PRICE = 200? # 修改商品原價(jià)

del obj.PRICE? ? # 刪除商品原價(jià)

綜上所述

定義property屬性共有兩種方式,分別是【裝飾器】和【類屬性】舞终,而【裝飾器】方式針對(duì)經(jīng)典類和新式類又有所不同轻庆。

通過使用property屬性,能夠簡(jiǎn)化調(diào)用者在獲取數(shù)據(jù)的流程

作者:IIronMan

鏈接:http://www.reibang.com/p/e6bf47449f7e

來源:簡(jiǎn)書

著作權(quán)歸作者所有敛劝。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)余爆,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末夸盟,一起剝皮案震驚了整個(gè)濱河市龙屉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌满俗,老刑警劉巖转捕,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異唆垃,居然都是意外死亡五芝,警方通過查閱死者的電腦和手機(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
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(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)容