python類相關(guān)函數(shù)和內(nèi)置屬性透揣、魔術(shù)方法、property裝飾器

與類有關(guān)的幾個(gè)函數(shù)

1川抡、getattrr():獲取對(duì)象的屬性和方法

getattr有三個(gè)參數(shù):getattr(對(duì)象名或類名辐真,屬性,‘default’)
最后一個(gè)default是默認(rèn)值崖堤,也就是某個(gè)類或者某個(gè)對(duì)象沒有你要獲取的屬性或者方法時(shí)侍咱,返回default

2、setattrr():設(shè)置一個(gè)不存在的屬性

setattr(對(duì)象名或類名倘感,屬性名放坏,設(shè)置的值)
使用setattr時(shí)有兩種情況:
第一種就是原本對(duì)象或者類內(nèi)并沒有這個(gè)屬性,我可以通過setattr來進(jìn)行添加并賦值
第二種就是老玛,假如某對(duì)象或者類內(nèi)已經(jīng)存在某屬性淤年,再用setattr進(jìn)行操作的話就相當(dāng)于對(duì)該屬性值進(jìn)行修改

3、hasattrr():判斷對(duì)象有沒有某屬性或者方法蜡豹,返回布爾值

hasattr(對(duì)象或類名麸粮,要檢查的屬性名或方法名)

4、delattrr():刪除屬性

類屬性只能通過類名來刪

5镜廉、isinstancer():檢查是不是這個(gè)對(duì)象產(chǎn)生的實(shí)例弄诲,返回布爾值
6、issubclassr():檢查一個(gè)類是否是另一個(gè)類的子類娇唯,返回布爾值
7齐遵、dir() : 獲取對(duì)象的成員列表

die(類)和dir(實(shí)例對(duì)象)輸出一致

8、property() ------使用在類的內(nèi)部處理set和get方法

property() 函數(shù)的作用是在新式類中返回屬性值塔插。
class property([fget[, fset[, fdel[, doc]]]])

  • fget -- 獲取屬性值的函數(shù)
  • fset -- 設(shè)置屬性值的函數(shù)
  • fdel -- 刪除屬性值函數(shù)
  • doc -- 屬性描述信息

對(duì)應(yīng)實(shí)現(xiàn)了自己的get_attr 和set_attr或del_attr方法的屬性, 如果想要替換成新式類的用法, 而不影響之前類的調(diào)用邏輯, 可以使用property綁定其get,set,del方法, 從而在正常的 點(diǎn)(.)訪問和修改操作時(shí)能夠正常映射到這些方法梗摇。

#使用property綁定fee 的get_fee和set_fee方法
fee = property(get_fee, set_fee)

除了使用property將get, Set方法映射到對(duì)屬性的訪問上, python還推薦使用@property來處理get和set方法。

class Student():
    def __init__(self,name,age):
        self.__name=name
        self.__age=age

    @property
    def age(self):
        print('reading age')
        return self.__age

    @age.setter
    def age(self, age):
        print('setting age')
        self.__age = age

    @age.deleter
    def age(self):
        print('deleting age')
        del self.__age

類內(nèi)置屬性

1想许、__name__ 文檔伶授,也就是獲取類的名稱
2断序、__doc__ 文檔,也就是獲取類的注釋文檔

注意它只返回第一個(gè)三對(duì)單引號(hào)或三對(duì)雙引號(hào)的類的注釋文檔糜烹。

3违诗、__dict__

dict是用來存儲(chǔ)對(duì)象屬性的一個(gè)字典,其鍵為屬性名疮蹦,值為屬性的值诸迟。
許多內(nèi)建類型就沒有__dict__屬性,如list挚币,此時(shí)就需要用dir()來列出對(duì)象的所有屬性亮蒋。

  • 類的dict存儲(chǔ)所有實(shí)例共享的變量和函數(shù)(類屬性,方法等)妆毕,類的dict并不包含其父類的屬性慎玖。
  • 實(shí)例的dict僅存儲(chǔ)與該實(shí)例相關(guān)的實(shí)例屬性('不包含類屬性'),正是因?yàn)閷?shí)例的dict屬性笛粘,每個(gè)實(shí)例的實(shí)例屬性才會(huì)互不影響趁怔。
4、__bases__

可知道這個(gè)類的父類是誰


類魔術(shù)方法

一薪前、操作相關(guān)

1润努、__init__ () 初始化函數(shù)(構(gòu)造函數(shù))

Python的類中可以有很多個(gè)構(gòu)造函數(shù),但是最后一個(gè)構(gòu)造函數(shù)會(huì)覆蓋掉上面的構(gòu)造函數(shù)示括,所以铺浇,只有最后一個(gè)init函數(shù)有效, 可以通過定義類方法實(shí)現(xiàn)多個(gè)構(gòu)造方法的技巧。

2垛膝、__call__() 對(duì)象當(dāng)函數(shù)使用時(shí)觸發(fā)

實(shí)例化對(duì)象()自動(dòng)調(diào)用類中的__call__方法

圖片.png

第一個(gè)參數(shù)為當(dāng)前類對(duì)象self

def __call__(self, *args, **kwargs):
    ...
3鳍侣、__str__ ()__repr__()

__str__ ()在對(duì)象當(dāng)字符串使用時(shí)觸發(fā),返回一個(gè)很好地向人描述對(duì)象的字符串。
__repr__()在對(duì)象當(dāng)字符串使用時(shí)觸發(fā),返回供解釋器讀取的字符串,一般是返回類名吼拥。
使用str()或repr()方法來解析對(duì)象時(shí), 就會(huì)觸發(fā)對(duì)象的strrepr方法倚聚。

如果實(shí)現(xiàn)了repr而沒有定義str,那么對(duì)象將會(huì)表現(xiàn)出str = repr

4凿可、__new__()--重要

特性:

  • __new__ 方法是在類準(zhǔn)備將自身實(shí)例化時(shí)調(diào)用惑折。
  • __new__方法始終都是類的靜態(tài)方法,即使沒有被加上靜態(tài)方法裝飾器

在定義新式類時(shí)沒有重新定義new()時(shí)枯跑,Python默認(rèn)是調(diào)用該類的直接父類的new()方法來構(gòu)造該類的實(shí)例惨驶,如果該類的父類也沒有重寫new(),那么將一直按此規(guī)矩追溯至object的new()方法敛助,因?yàn)閛bject是所有新式類的基類敞咧。

新式類開始實(shí)例化時(shí),new()方法會(huì)返回cls(cls指代當(dāng)前類)的實(shí)例辜腺,然后該類的init()方法作為構(gòu)造方法會(huì)接收這個(gè)實(shí)例(即self)作為自己的第一個(gè)參數(shù)休建,然后依次傳入new()方法中接收的位置參數(shù)和命名參數(shù)。

注意:如果new()沒有返回cls(即當(dāng)前類)的實(shí)例评疗,那么當(dāng)前類的init()方法是不會(huì)被調(diào)用的测砂。如果new()返回其他類(新式類或經(jīng)典類均可)的實(shí)例,那么只會(huì)調(diào)用被返回的那個(gè)類的構(gòu)造方法百匆。

第一個(gè)參數(shù)cls是當(dāng)前正在實(shí)例化的類

def __new__(cls, *args, **kwargs):
    ...
    return object.__new__(cls)

二砌些、描述符相關(guān)

如果一個(gè)對(duì)象定義了這三種方法的任何一種,它就是一個(gè)描述符(descriptor)加匈。
描述符詳解參考我另一篇文章

1存璃、__get__

獲取屬性時(shí)調(diào)用,返回設(shè)置的屬性值雕拼,通常是set中的value,或者附加的其他組合值纵东。

2、__set__

設(shè)置屬性時(shí)調(diào)用啥寇,返回None.

3偎球、__delete__

刪除屬性時(shí)調(diào)用,返回None


二辑甜、屬性操作和訪問相關(guān)

1衰絮、__getattr__

訪問屬性不存在時(shí)調(diào)用改方法

2、__setattr__

修改屬性不存在時(shí)調(diào)用改方法

3磷醋、__getattribute__ 不需要自行定義,除非對(duì)屬性訪問有特殊的要求

對(duì)新式類的實(shí)例來說猫牡,所有屬性和方法的訪問操作都是通過getattribute完成,這是由object基類實(shí)現(xiàn)的邓线。如果有特殊的要求淌友,可以重載getattribute方法。
每次通過實(shí)例訪問屬性褂痰,都會(huì)經(jīng)過getattribute函數(shù)亩进。而當(dāng)屬性不存在時(shí),仍然需要訪問getattribute缩歪,不過接著要訪問getattr归薛。這就好像是一個(gè)異常處理函數(shù)。
__getattribute__ 有關(guān) 的屬性搜索策略參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末匪蝙,一起剝皮案震驚了整個(gè)濱河市主籍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逛球,老刑警劉巖千元,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異颤绕,居然都是意外死亡幸海,警方通過查閱死者的電腦和手機(jī)祟身,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來物独,“玉大人袜硫,你說我怎么就攤上這事〉猜ǎ” “怎么了婉陷?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長官研。 經(jīng)常有香客問我秽澳,道長,這世上最難降的妖魔是什么戏羽? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任担神,我火速辦了婚禮,結(jié)果婚禮上蛛壳,老公的妹妹穿的比我還像新娘杏瞻。我一直安慰自己,他們只是感情好衙荐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布捞挥。 她就那樣靜靜地躺著,像睡著了一般忧吟。 火紅的嫁衣襯著肌膚如雪砌函。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天溜族,我揣著相機(jī)與錄音讹俊,去河邊找鬼。 笑死煌抒,一個(gè)胖子當(dāng)著我的面吹牛仍劈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寡壮,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贩疙,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了况既?” 一聲冷哼從身側(cè)響起这溅,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棒仍,沒想到半個(gè)月后悲靴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡莫其,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年癞尚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耸三。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浇揩,死狀恐怖吕晌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情临燃,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布烙心,位于F島的核電站膜廊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏淫茵。R本人自食惡果不足惜爪瓜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匙瘪。 院中可真熱鬧铆铆,春花似錦、人聲如沸丹喻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碍论。三九已至谅猾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鳍悠,已是汗流浹背税娜。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留藏研,地道東北人敬矩。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像蠢挡,于是被迫代替她去往敵國和親弧岳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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

  • 內(nèi)置函數(shù)Python解釋器內(nèi)置了許多功能和類型,總是可用的袒哥。他們是按字母順序列在這里缩筛。 abs(x)返回一個(gè)數(shù)的絕...
    uangianlap閱讀 1,236評(píng)論 0 0
  • Python下一切皆對(duì)象瞎抛,每個(gè)對(duì)象一般都有多個(gè)屬性(attribute)。同樣每個(gè)Python類會(huì)帶有內(nèi)置屬性(包...
    mysimplebook閱讀 331評(píng)論 0 0
  • Python一切皆對(duì)象(object)却紧,每個(gè)對(duì)象都可能有多個(gè)屬性(attribute)桐臊。Python的屬性有一套統(tǒng)...
    愛折騰的大懶豬閱讀 252評(píng)論 0 5
  • abs() 函數(shù) 描述 abs() 函數(shù)返回?cái)?shù)字的絕對(duì)值胎撤。 語法 以下是 abs() 方法的語法: abs( x ...
    時(shí)光是座城閱讀 490評(píng)論 0 2
  • 根據(jù)物理學(xué)的原理,速度與時(shí)間成反比断凶。在我們所處的這個(gè)飛速發(fā)展的時(shí)代伤提,當(dāng)我們貪婪地享受噴氣飛機(jī)、高速列車认烁、家...
    8d492217f818閱讀 230評(píng)論 0 0