<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        Python高級之__attr__對象屬性

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:27:30
        文檔

        Python高級之__attr__對象屬性

        Python高級之__attr__對象屬性:Python一切皆對象(object),每個(gè)對象都可能有多個(gè)屬性(attribute)。Python的屬性有一套統(tǒng)一的管理方案。對象的屬性可能來自于其類定義,叫做類屬性(class attribute)。類屬性可能來自類定義自身,也可能根據(jù)類定義繼承來的。一個(gè)對象的屬性還可能是該對象實(shí)例
        推薦度:
        導(dǎo)讀Python高級之__attr__對象屬性:Python一切皆對象(object),每個(gè)對象都可能有多個(gè)屬性(attribute)。Python的屬性有一套統(tǒng)一的管理方案。對象的屬性可能來自于其類定義,叫做類屬性(class attribute)。類屬性可能來自類定義自身,也可能根據(jù)類定義繼承來的。一個(gè)對象的屬性還可能是該對象實(shí)例

        Python一切皆對象(object),每個(gè)對象都可能有多個(gè)屬性(attribute)。Python的屬性有一套統(tǒng)一的管理方案。

        對象的屬性可能來自于其類定義,叫做類屬性(class attribute)。

        類屬性可能來自類定義自身,也可能根據(jù)類定義繼承來的。

        一個(gè)對象的屬性還可能是該對象實(shí)例定義的,叫做對象屬性(object attribute)。

        對象的屬性儲存在對象的__dict__屬性中。

        __dict__為一個(gè)詞典,鍵為屬性名,對應(yīng)的值為屬性本身。我們看下面的類和對象。

        對應(yīng)Java的反射中,來獲取對象的屬性,如:

        public class UserBean {
         private Integer id;
         private int age;
         private String name;
         private String address;
        }
        //類實(shí)例化
        UserBean bean = new UserBean();
        bean.setId(100);
        bean.setAddress("武漢");
        //得到類對象
        Class userCla = (Class) bean.getClass();
         
        //得到類中的所有屬性集合
        Field[] fs = userCla.getDeclaredFields();
        ......
        class bird(object):
         feather = True
        class chicken(bird):
         fly = False
         def __init__(self, age):
         self.age = age
        summer = chicken(2)
        print(bird.__dict__)
        print(chicken.__dict__)
        print(summer.__dict__)

        輸出:

        {'__dict__': <attribute '__dict__' of 'bird' objects>, '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'bird' objects>, 'feather': True, '__doc__': None}

        {'fly': False, '__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x2b91db476d70>}

        {'age': 2}

        第一行為bird類的屬性,比如feather。

        第二行為chicken類的屬性,比如fly和__init__方法。

        第三行為summer對象的屬性,也就是age。

        有一些屬性,比如__doc__,并不是由我們定義的,而是由Python自動生成。此外,bird類也有父類,是object類(正如我們的bird定義,class bird(object))。這個(gè)object類是Python中所有類的父類。

        也就是子類的屬性,會覆蓋父類的屬性。

        可以通過下面2中方法修改類的屬性:

        summer.__dict__['age'] = 3
        print(summer.__dict__['age'])
        summer.age = 5
        print(summer.age)

        Python中的property

        同一個(gè)對象的不同屬性之間可能存在依賴關(guān)系。當(dāng)某個(gè)屬性被修改時(shí),我們希望依賴于該屬性的其他屬性也同時(shí)變化。這時(shí),我們不能通過__dict__的方式來靜態(tài)的儲存屬性。Python提供了多種即時(shí)生成屬性的方法。其中一種稱為特性(property)。

        class bird(object):
         feather = True
        #extends bird class
        class chicken(bird):
         fly = False
         def __init__(self, age):
         self.age = age
         def getAdult(self):
         if self.age > 1.0: 
        return True
         else: 
        return False
         adult = property(getAdult) # property is built-in
        summer = chicken(2)
        print(summer.adult)
        summer.age = 0.5
        print(summer.adult)

        這里的功能類似于觸發(fā)器。在每次獲取adult屬性的時(shí)候,會觸發(fā)getAdult的值。

        特性使用內(nèi)置函數(shù)property()來創(chuàng)建。property()最多可以加載四個(gè)參數(shù)。前三個(gè)參數(shù)為函數(shù),分別用于處理查詢特性、修改特性、刪除特性。最后一個(gè)參數(shù)為特性的文檔,可以為一個(gè)字符串,起說明作用。

        class num(object):
         def __init__(self, value):
        self.value = value
        print '<--init'
         def getNeg(self):
        print '<--getNeg'
        return self.value * -1
         def setNeg(self, value):
        print '<--setNeg'
        self.value = (-1) * value
         def delNeg(self):
        print("value also deleted")
        del self.value
         neg = property(getNeg, setNeg, delNeg, "I'm negative")
        x = num(1.1)
        print(x.neg)
        x.neg = -22
        print(x.value)
        print(num.neg.__doc__)
        del x.neg

        整個(gè)過程之中,都沒有調(diào)用對應(yīng)的幾個(gè)函數(shù)。

        也就是說,neg這個(gè)屬性的創(chuàng)建,設(shè)置,刪除都通過property()注冊起來了。

        Python特殊方法__getattr__ (這個(gè)常用)

        我們可以用__getattr__(self, name)來查詢即時(shí)生成的屬性。

        在pyhton中,對象屬性都是動態(tài)的,隨時(shí)可以根據(jù)需要添加或者刪除屬性。

        那么getattr的作用就是,在產(chǎn)生這些屬性的時(shí)候,進(jìn)行一層判斷處理操作。

        比如:

        class bird(object):
         feather = True
        class chicken(bird):
         fly = False
         def __init__(self, age):
        self.age = age
         def __getattr__(self, name):
        if name == 'adult':
        if self.age > 1.0: 
        return True
        else: 
        return False
        else: 
        raise AttributeError(name)
        summer = chicken(2)
        print(summer.adult)
        summer.age = 0.5
        print(summer.adult)
        print(summer.male)

        每個(gè)特性需要有自己的處理函數(shù),而__getattr__可以將所有的即時(shí)生成屬性放在同一個(gè)函數(shù)中處理。__getattr__可以根據(jù)函數(shù)名區(qū)別處理不同的屬性。比如上面我們查詢屬性名male的時(shí)候,raise AttributeError。

        (Python中還有一個(gè)__getattribute__特殊方法,用于查詢?nèi)我鈱傩浴?/p>

        __getattr__只能用來查詢不在__dict__系統(tǒng)中的屬性)

        __setattr__(self, name, value)和__delattr__(self, name)可用于修改和刪除屬性。

        它們的應(yīng)用面更廣,可用于任意屬性。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Python高級之__attr__對象屬性

        Python高級之__attr__對象屬性:Python一切皆對象(object),每個(gè)對象都可能有多個(gè)屬性(attribute)。Python的屬性有一套統(tǒng)一的管理方案。對象的屬性可能來自于其類定義,叫做類屬性(class attribute)。類屬性可能來自類定義自身,也可能根據(jù)類定義繼承來的。一個(gè)對象的屬性還可能是該對象實(shí)例
        推薦度:
        標(biāo)簽: 高級 對象 屬性
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 最近中文字幕免费完整| sss日本免费完整版在线观看| 久久青草国产免费观看| 国产亚洲一区二区三区在线不卡| 校园亚洲春色另类小说合集| 免费无码又爽又刺激高潮| 亚洲人成网站在线在线观看| 永久免费看bbb| 国产亚洲精品成人久久网站| 亚洲av无码不卡私人影院| 一本一道dvd在线观看免费视频| 亚洲精品和日本精品| 西西人体免费视频| 1区1区3区4区产品亚洲| 114级毛片免费观看| 伊人久久五月丁香综合中文亚洲| 成人免费视频观看无遮挡| 亚洲成av人在线观看网站| 亚洲国产av一区二区三区| 国产97视频人人做人人爱免费| 国产日韩亚洲大尺度高清| 99爱免费观看视频在线| 亚洲av无码久久忘忧草| 国产hs免费高清在线观看| 日韩精品无码永久免费网站| 国产亚洲人成网站观看| 国产精品久久久久久久久免费| 亚洲 欧洲 自拍 另类 校园| 亚洲精品国产精品乱码不卡| 日韩人妻一区二区三区免费| 亚洲Av高清一区二区三区| 免费v片视频在线观看视频| 免费福利电影在线观看| 91亚洲视频在线观看| 免费欧洲美女牲交视频| 精品四虎免费观看国产高清午夜| 亚洲w码欧洲s码免费| 精品国产香蕉伊思人在线在线亚洲一区二区 | 久久久亚洲精品国产| 免费精品人在线二线三线区别| 九九免费观看全部免费视频|