Python基礎(chǔ)19-面向?qū)ο?屬性限制-只讀)

1 通過屬性私有化+只讀屬性實(shí)例方法

  • 基本操作
class Person:
    def __init__(self):
        self.__age = 18

    def getAge(self):
        return self.__age

p1 = Person()
# print(p1.__age) # error
# 通過實(shí)例方法讀取
print(p1.getAge())
  • 優(yōu)化(通過@property 裝飾器)
    讓實(shí)例可以通過 p1.age 方式讀取屬性包蓝,而不是通過實(shí)例方法始苇,同時(shí)p1.age = 1 操作是要報(bào)錯(cuò)搁拙,而不是給實(shí)例添加 age 屬性
# 1云挟、讓類繼承object
class Person(object):
    def __init__(self):
        self.__age = 18

    #2矫限、通過@property 讓實(shí)例對(duì)象以".age"的方式, 來使用這個(gè)方法
    @property
    def age(self): #3哺哼、方法名直接使用屬性名
        return self.__age


p1 = Person()
print(p1.age)
# p1.age = 10 # error

2 property

2.1 property作用:將一些“屬性的操作方法”關(guān)聯(lián)到某一個(gè)屬性中。作用:將一些“屬性的操作方法”關(guān)聯(lián)到某一個(gè)屬性中叼风。

class : property

2.2 類區(qū)分

經(jīng)典類:沒有繼承(object)
新式類:有繼承(object)

python2.x 定義類時(shí)取董,默認(rèn)不繼承 object
python3.x 定義類時(shí),默認(rèn)繼承 object

可通過類.__base__打印查看新定義類基類

  • 注意:建議使用新式類无宿,且一般讓類顯式繼承 object甲葬,這樣 python2.x 或3都能夠使用新式類

2.3 屬性的讀寫 - property 在新式類和經(jīng)典類中的使用方式

2.3.1 新式類

  • 使用方式一,property 類的使用
class Person(object):

    def __init__(self):
        self.__age = 18

    def get_age(self):
        return self.__age

    def set_age(self, value):
        self.__age = value

    age = property(get_age, set_age)


p = Person()
print(p.age)

p.age = 22
print(p.age)
print(p.__dict__) # 確定賦值時(shí)候并不是給實(shí)例添加 age 屬性

>>>> 打印結(jié)果
18
22
{'_Person__age': 22}

  • 使用方式二懈贺,參考上圖 property 的介紹時(shí)給出的內(nèi)部實(shí)現(xiàn)例子经窖,使用其中的拆分寫法
class Person(object):

    def __init__(self):
        self.__age = 18

    @property
    def age(self):
        return self.__age

    @age.setter  # 因?yàn)槭菍?duì) age 進(jìn)行裝飾器,所以 get 方法需要先寫上
    def age(self, value):
        self.__age = value


p = Person()
print(p.age)

p.age = 22
print(p.age)
print(p.__dict__)

>>>> 打印結(jié)果
18
22
{'_Person__age': 22}

問題:@property 與 @property.setter 的關(guān)系

2.3.2 經(jīng)典類

結(jié)果:不管是方式一(使用 property 類方式)梭灿,還是方式二(參考property 類的內(nèi)部實(shí)現(xiàn)方式)画侣,都是只能管理 get 方式,其他方法不能被管理到堡妒,即使是把其他方法寫上(如:set 方法)配乱,進(jìn)行賦值時(shí)候也就是給實(shí)例對(duì)象添加新的屬性而已

以下代碼環(huán)境在 python2.x

  • 使用方式一,property 類的使用
# _*_ encoding:utf-8 _*_
class Person:

    def __init__(self):
        self.__age = 18

    def get_age(self):
        return self.__age

    def set_age(self, value):
        self.__age = value

    age = property(get_age, set_age)


p = Person()
print(p.age)

p.age = 22
print(p.age)
print(p.__dict__) # 確定賦值時(shí)候并不是給實(shí)例添加 age 屬性

>>>> 打印結(jié)果
18
22
{'age':22, '_Person__age': 18}

  • 使用方式二皮迟,參考上圖 property 的介紹時(shí)給出的內(nèi)部實(shí)現(xiàn)例子搬泥,使用其中的拆分寫法
# _*_ encoding:utf-8 _*_
class Person:

    def __init__(self):
        self.__age = 18

    @property
    def age(self):
        return self.__age

    @age.setter 
    def age(self, value):
        self.__age = value


p = Person()
print(p.age)

p.age = 22
print(p.age)
print(p.__dict__)

>>>> 打印結(jié)果
18
22
{'age':22, '_Person__age': 18}

  • 所以建議使用新式類,這樣以后使用屬性更加方便
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伏尼,一起剝皮案震驚了整個(gè)濱河市忿檩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌爆阶,老刑警劉巖燥透,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辨图,居然都是意外死亡班套,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門故河,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吱韭,“玉大人,你說我怎么就攤上這事鱼的±砼瑁” “怎么了瞻讽?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)熏挎。 經(jīng)常有香客問我速勇,道長(zhǎng),這世上最難降的妖魔是什么坎拐? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任烦磁,我火速辦了婚禮,結(jié)果婚禮上哼勇,老公的妹妹穿的比我還像新娘都伪。我一直安慰自己,他們只是感情好积担,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布陨晶。 她就那樣靜靜地躺著,像睡著了一般帝璧。 火紅的嫁衣襯著肌膚如雪先誉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天的烁,我揣著相機(jī)與錄音褐耳,去河邊找鬼。 笑死渴庆,一個(gè)胖子當(dāng)著我的面吹牛铃芦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播襟雷,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼刃滓,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了耸弄?” 一聲冷哼從身側(cè)響起咧虎,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叙赚,沒想到半個(gè)月后老客,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體僚饭,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡震叮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鳍鸵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苇瓣。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖偿乖,靈堂內(nèi)的尸體忽然破棺而出击罪,到底是詐尸還是另有隱情哲嘲,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布媳禁,位于F島的核電站眠副,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏竣稽。R本人自食惡果不足惜囱怕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望毫别。 院中可真熱鬧娃弓,春花似錦、人聲如沸岛宦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)砾肺。三九已至挽霉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間变汪,已是汗流浹背炼吴。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疫衩,地道東北人硅蹦。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像闷煤,于是被迫代替她去往敵國(guó)和親童芹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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