• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            任我行

            一天一個(gè)腳印......
            每日一句:
            posts - 54, comments - 218, trackbacks - 1, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            Python學(xué)習(xí)(三)

            Posted on 2005-10-11 17:01 任我行 閱讀(851) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Python
            繼續(xù)Dive Into Python.

            20、定義類
                以FileInfo類的定義為例
            from UserDict import UserDict
            class FileInfo(UserDict):
            "store file metadata"
            def __init__(self, filename=None):
            UserDict.__init__(self)
            self["name"] = filename
                1)父類放在類名后的小括號(hào)內(nèi);
                2)類可以有文檔字符串
                3)__init__函數(shù)在對(duì)象被創(chuàng)建后被自動(dòng)調(diào)用的第一個(gè)函數(shù),可以指定任何個(gè)數(shù)的參數(shù)。
                4)慣例,__init__應(yīng)為類中第一個(gè)定義的方法,其第一個(gè)參數(shù)指向類的當(dāng)前實(shí)例的第一個(gè)引用,且應(yīng)命之為self。__init__中要顯式地調(diào)用父類的__init__方法。
                5)__init__無返回值。
                6)__init__的定義是可選的,一旦定義必須顯式調(diào)用父類的__init__方法。
                7)除了可自由定義的普通的類方法,還有一些可以定義的專用方法。專用方法是在特殊情況下或當(dāng)使用特別語法時(shí)由Python替你調(diào)用的,而不是在代碼中直接調(diào)用(象普通的方法那樣)。也就是說,python提供了一種方法,可以將非方法調(diào)用語法映射到方法調(diào)用上。最常見是__getitem__和__setitem__方法。例如,在上例中增加兩個(gè)方法的定義,就可以實(shí)現(xiàn)方便的取值和賦值:
            def __getitem__(self, key): return self.data[key]
            def __setitem__(self, key, item): self.data[key] = item
            >f = fileinfo.FileInfo("/music/_singles/kairo.mp3")
            >f[“name”]
            >f[“anothername”]=...
                8)__repr__專用函數(shù),返回一個(gè)對(duì)象的字符串表示。Python用內(nèi)置函數(shù)repr來顯示變量的值,如果repr的參數(shù)是某個(gè)對(duì)象時(shí),那用它的類的__repr__返回對(duì)象的字符串表示。
                9)__cmp__專用函數(shù),在比較類實(shí)例時(shí)被調(diào)用。即當(dāng)作==比較時(shí),被調(diào)用。
                10)__len__專用函數(shù),當(dāng)調(diào)用內(nèi)置函數(shù)len(instance)時(shí)被調(diào)用,對(duì)字符串返回字符的個(gè)數(shù),對(duì)字典返回關(guān)鍵字的個(gè)數(shù),對(duì)序列或列表返回元素個(gè)數(shù)。對(duì)自由定義的類,可自由定義返回的len的值的含義。:)
                11)__delitem__專用函數(shù), 在調(diào)用 del instance[key]被調(diào)用。
                12)__setitem__,__getitem__,__cmp__,__len__,等方法加入到類的定義中后,可以使任何類看起來象“字典”。還有其它的一些專用方法,可以使類看起來象數(shù)值一樣可以對(duì)它進(jìn)行運(yùn)行。


            21、類的實(shí)例化和清除
                1)象調(diào)用函數(shù)一樣調(diào)用類,就可以實(shí)例化一個(gè)類,傳入的參數(shù)是__init__定義的參數(shù)(參數(shù)是以從右向左的順序傳遞給__init__的,python會(huì)自動(dòng)添加self),返回一個(gè)實(shí)例對(duì)象。
                2)一個(gè)類的所有實(shí)例,共享類的文檔字符串,
                3)python采用引用計(jì)數(shù)的技術(shù)進(jìn)行垃圾回收,因而維護(hù)著對(duì)第一個(gè)創(chuàng)建的實(shí)例的引用的列表,當(dāng)計(jì)數(shù)為0時(shí),實(shí)例自動(dòng)被破壞。
                4)不用顯式的釋放一個(gè)實(shí)例,因?yàn)楫?dāng)變量超出作用域時(shí)自動(dòng)失效,而至其所對(duì)應(yīng)的實(shí)例的引用數(shù)減一。
                5)在Python中,你不能子類化象字符串、列表和字典的內(nèi)置數(shù)據(jù)類型。作為補(bǔ)償,Python附帶了封裝類,可以模擬這些內(nèi)置的數(shù)據(jù)類型的行為: UserString,UserList,和 UserDict。
                6)子類中定義的方法覆蓋父類的方法,python不支持函數(shù)重載。由此,子類的__init__與父類的__init__的參數(shù)序列可以有較大的不同。
                7)python支持?jǐn)?shù)據(jù)屬性,即C++中所謂的“數(shù)據(jù)成員”,對(duì)其值的引用需要以"實(shí)例名.屬性名"的方式。注意,數(shù)據(jù)屬性是類實(shí)例擁有的屬性,還有一種屬性是叫屬性,是類所擁有的
                8)
            22、當(dāng):號(hào)后面的塊(即需要縮進(jìn)的內(nèi)容)只有一條語句時(shí),可以直接將此語句放在:后面。

            777午夜精品久久av蜜臀| 久久精品a亚洲国产v高清不卡| 精品久久久久久亚洲| 国产精品免费看久久久香蕉| 久久久久97国产精华液好用吗| 亚洲性久久久影院| 久久精品国产亚洲av麻豆小说 | 久久国产V一级毛多内射| 中文字幕无码久久人妻| www.久久热.com| 一本久久免费视频| 94久久国产乱子伦精品免费| 久久久精品国产| 99久久成人国产精品免费| 久久精品无码av| 无码人妻久久一区二区三区免费| 久久一区二区三区99| 久久久久亚洲AV无码永不| 久久久久亚洲AV成人网人人网站| 久久精品黄AA片一区二区三区| 国产午夜电影久久| 久久线看观看精品香蕉国产| 中文字幕日本人妻久久久免费 | 久久性精品| 精品国产91久久久久久久a| 亚洲欧美国产精品专区久久| 久久久久国产精品| 日本精品久久久中文字幕| 91精品国产高清久久久久久io| 少妇被又大又粗又爽毛片久久黑人| 久久亚洲精品成人AV| 久久狠狠一本精品综合网| 97久久精品午夜一区二区| 久久人人爽爽爽人久久久| 久久青青草原精品国产| 久久亚洲私人国产精品vA| 婷婷五月深深久久精品| 久久人妻少妇嫩草AV蜜桃| 色妞色综合久久夜夜| 久久精品国产乱子伦| 久久精品国产99久久久|