最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python類的定義和使用詳情

 更新時間:2022年03月01日 09:37:20   作者:Mar丶流年  
這篇文章主要介紹了Python類的定義與使用,類名只要是一個合法的標識符即可,但這僅僅滿足的是?Python?的語法要求:如果從程序的可讀性方面來看,Python?的類名必須是由一個或多個有意義的單詞連綴而成的,下文基于這些基礎內容展開介紹,需要的朋友可以參考一下

1.基礎概念

在面向對象的程序設計過程中有兩個重要概念:類(class)和對象(object,也被稱為實例,instance),其中類是某一批對象的抽象,可以把類理解成某種概念;對象才是一個具體存在的實體。從這個意義上看,日常所說的人,其實都是人的對象,而不是人類。

Python 定義類的簡單語法如下:

class 類名:
    執(zhí)行語句...
    零個到多個類變量...
    零個到多個方法...

類名只要是一個合法的標識符即可,但這僅僅滿足的是 Python 的語法要求:如果從程序的可讀性方面來看,Python 的類名必須是由一個或多個有意義的單詞連綴而成的,每個單詞首字母大寫,其他字母全部小寫,單詞與單詞之間不要使用任何分隔符。

從上面定義來看,Python 的類定義有點像函數(shù)定義,都是以冒號(:)作為類體的開始,以統(tǒng)一縮進的部分作為類體的。區(qū)別只是函數(shù)定義使用 def 關鍵字,而類定義則使用 class 關鍵字。

Python 的類定義由類頭(指 class 關鍵字和類名部分)和統(tǒng)一縮進的類體構成,在類體中最主要的兩個成員就是類變量和方法。如果不為類定義任何類變量和方法,那么這個類就相當于一個空類,如果空類不需要其他可執(zhí)行語句,則可使用 pass 語句作為占位符。

例如,如下類定義是允許的:

class Empty:
? ? pass

通常來說,空類沒有太大的實際意義。

類中各成員之間的定義順序沒有任何影響,各成員之間可以相互調用。

Python 類所包含的最重要的兩個成員就是變量和方法,其中類變量屬于類本身,用于定義該類本身所包含的狀態(tài)數(shù)據:而實例變量則屬于該類的對象,用于定義對象所包含的狀態(tài)數(shù)據:方法則用于定義該類的對象的行為或功能實現(xiàn)。

Python 是一門動態(tài)語言,因此它的類所包含的類變量可以動態(tài)增加或刪除(程序在類體中為新變量賦值就是增加類變量),程序也可在任何地方為已有的類增加變量;程序可通過 del 語句刪除己有類的類變量。

類似的是,Python 對象的實例變量也可以動態(tài)增加或刪除(只要對新實例變量賦值就是增加實例變量),因此程序可以在任何地方為己有的對象增加實例變量;程序可通過 del 語句刪除已有對象的實例變量。

在類中定義的方法默認是實例方法,定義實例方法的方法與定義函數(shù)的方法基本相同,只是實例方法的第一個參數(shù)會被綁定到方法的調用者(該類的實例),因此實例方法至少應該定義一個參數(shù),該參數(shù)通常會被命名為 self。

注意:實例方法的第一個參數(shù)并不一定要叫 self,其實完全可以叫任意參數(shù)名,只是約定俗成地把該參數(shù)命名為 self,這樣具有最好的可讀性。

在實例方法中有一個特別的方法:__init__,這個方法被稱為構造方法。構造方法用于構造該類的對象,Python 通過調用構造方法返回該類的對象(無須使用 new)。
Python 中很多這種以雙下劃線開頭、雙下劃線結尾的方法,都具有特殊的意義,本教程后面還會詳細介紹這些特殊的方法。

構造方法是一個類創(chuàng)建對象的根本途徑,因此 Python 還提供了一個功能:如果開發(fā)者沒有為該類定義任何構造方法,那么 Python 會自動為該類定義一個只包含一個 self 參數(shù)的默認的構造方法。

2.定義一個 Person 類

下面程序將定義一個 Person 類:

class Person :
? ? '這是一個學習Python定義的一個Person類'
? ? # 下面定義了一個類變量
? ? hair = 'black'
? ? def __init__(self, name = 'Charlie', age=8):
? ? ? ? # 下面為Person對象增加2個實例變量
? ? ? ? self.name = name
? ? ? ? self.age = age
? ? # 下面定義了一個say方法
? ? def say(self, content):
? ? ? ? print(content)

上面的 Person 類代碼定義了一個構造方法,該構造方法只是方法名比較特殊:__init__,該方法的第一個參數(shù)同樣是 self,被綁定到構造方法初始化的對象。

與函數(shù)類似的是,Python 也允許為類定義說明文檔,該文檔同樣被放在類聲明之后、類體之前,如上面程序中第二行的字符串所示。

在定義類之后,接下來即可使用該類了。

Python 的類大致有如下作用:

  • 定義變量;
  • 創(chuàng)建對象;
  • 派生子類;

3.類定義

# coding:utf-8

if __name__ == '__main__':

? ? '''
? ? 定義:class 類名(object):
? ? ? ? ? ?類屬性,方法等......
? ? 實例化: 類名(無參|參數(shù)......)
? ? '''
? ? class A(object):
? ? ? ? pass
? ? a = A()
? ? print(a) ?# <__main__.A object at 0x00D9DD50>

4.類方法定義

# coding:utf-8

if __name__ == '__main__':

? ? '''
? ? 定義:通過def + 方法名(self,參數(shù)1,參數(shù)2......) self是必須的
? ? 調用:object.方法名(參數(shù)1,參數(shù)2......)
? ? '''
? ? class B(object):
? ? ? ? sex = 'man'
? ? ? ? def talk(self, name):
? ? ? ? ? ? print(name)
? ? b = B()
? ? b.talk('ok') ?# ok

5.類的繼承

# coding:utf-8

if __name__ == '__main__':

? ? '''
? ? 在聲明類的時候指定這個類繼承哪些類
? ? class 類名(extend1,extend2.......):
? ? ? ?屬性,方法......
? ? extend1,extend2 代表要繼承的類。可以一次性繼承多個類
? ? 繼承順序為從左到右,如果繼承的方法或屬性重復,以先繼承的為主
? ? class.__mro__ 查看類的繼承鏈
? ? '''
? ? class C(object):
? ? ? ? sex = 'woman'

? ? ? ? def see(self, name):
? ? ? ? ? ? print(f'看{name}')

? ? ? ? def talk(self, name):
? ? ? ? ? ? print(f'說{name}')

? ? class D(B, C):
? ? ? ? ? pass

? ? d = D()
? ? d.talk('yes') ?# yes 不是 說yes ?以先繼承的為主
? ? d.see('書') ?# 看書
? ? print(d.sex) ?# man 不是 woman ?以先繼承的為主
? ? print(D.__mro__) ?# (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class 'object'>)

6.類的公有,私有

# coding:utf-8

if __name__ == '__main__':

? ? '''
? ? 私有屬性定義: __+變量名
? ? 私有方法定義: __+函數(shù)名(self,參數(shù)1,參數(shù)2......)
? ? 私有外部無法訪問,只能內部訪問。但是私有屬性可以在外部通過object._+類名__+變量名 強制訪問
? ? '''
? ? class E(object):
? ? ? ? __name = 'xie'
? ? ? ? sex = 'man'

? ? ? ? def __talk(self, name):
? ? ? ? ? ? print(name)

? ? ? ? def run(self):
? ? ? ? ? ? self.__talk('ok')

? ? ? ? def dp(self):
? ? ? ? ? ? print(self.__name)

? ? e = E()
? ? # print(e.__name) Error 外部無法訪問私有屬性 D
? ? print(e.sex) ?# man
? ? # e.__talk('yes') Error 外部無法訪問私有方法
? ? # object._+類名__+變量名 強制訪問
? ? print(e._E__name) ?# xie
? ? e.run() ?# ok
? ? e.dp() ?# xie

7.子類調用父類的方法

# coding:utf-8

if __name__ == '__main__':

? ? '''
? ? 通過super().方法(參數(shù)1,參數(shù)2......)調用,該用法要求python版本3以上
? ? 或
? ? supper(子類名,self).方法(參數(shù)1,參數(shù)2......)
? ? '''
? ? class F(object):
? ? ? ? def talk(self, name):
? ? ? ? ? ? print(f'super name is {name}')

? ? class G(F):
? ? ? ? def talk(self, children_name, super_name):
? ? ? ? ? ? self.print_children_name(children_name)
? ? ? ? ? ? super().talk(super_name)

? ? ? ? def talk2(self, children_name, super_name):
? ? ? ? ? ? self.print_children_name(children_name)
? ? ? ? ? ? super(G, self).talk(super_name)

? ? ? ? def print_children_name(self, name):
? ? ? ? ? ? print(f'children name is {name}')


? ? g = G()
? ? g.talk('小明', '大明') ?# children name is 小明 super name is 大明
? ? g.talk2('小明', '大明') ?# children name is 小明 super name is 大明

到此這篇關于Python類的定義與使用詳情的文章就介紹到這了,更多相關Python類的定義與使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python枚舉類定義和使用方法

    Python枚舉類定義和使用方法

    這篇文章主要介紹了Python枚舉類定義和使用方法,文章圍繞主題的相關資料展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • conda創(chuàng)建環(huán)境過程出現(xiàn)"Solving?environment:?failed"報錯的詳細解決方法

    conda創(chuàng)建環(huán)境過程出現(xiàn)"Solving?environment:?failed"報錯的詳細解

    很長一段時間沒用conda了,然后突然使用conda創(chuàng)建環(huán)境報錯,所以下面這篇文章主要給大家介紹了關于conda創(chuàng)建環(huán)境過程出現(xiàn)"Solving?environment:?failed"報錯的詳細解決方法,需要的朋友可以參考下
    2022-11-11
  • 用Python將PDF文件轉存為圖片的實現(xiàn)方法

    用Python將PDF文件轉存為圖片的實現(xiàn)方法

    在Python中,將PDF文件轉換為圖片格式使用專門的庫來處理PDF文檔,并將其每一頁導出為常見的圖像格式,這可以通過PyMuPDF庫中的fitz模塊或pdf2image庫實現(xiàn),本文給大家介紹了用Python將PDF文件轉存為圖片的方法,需要的朋友可以參考下
    2024-04-04
  • Python實現(xiàn)類別變量的獨熱編碼

    Python實現(xiàn)類別變量的獨熱編碼

    這篇文章主要為大家詳細介紹了基于Python下OneHotEncoder與pd.get_dummies兩種方法,實現(xiàn)機器學習中最優(yōu)的編碼方法——獨熱編碼的方法,需要的可以參考一下
    2023-02-02
  • python Stanza處理NLP任務使用詳解(多語言處理工具)

    python Stanza處理NLP任務使用詳解(多語言處理工具)

    這篇文章主要為大家介紹了python Stanza處理NLP任務使用詳解,多語言處理工具使用實例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Python中使用md5sum檢查目錄中相同文件代碼分享

    Python中使用md5sum檢查目錄中相同文件代碼分享

    這篇文章主要介紹了Python中使用md5sum檢查目錄中相同文件代碼分享,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-02-02
  • Python調用C語言動態(tài)庫的方法小結

    Python調用C語言動態(tài)庫的方法小結

    這篇文章主要為大家詳細介紹了Python調用C語言動態(tài)庫的相關知識,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-12-12
  • Python如何讀寫二進制數(shù)組數(shù)據

    Python如何讀寫二進制數(shù)組數(shù)據

    這篇文章主要介紹了Python如何讀寫二進制數(shù)組數(shù)據,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-08-08
  • python__name__原理及用法詳解

    python__name__原理及用法詳解

    這篇文章主要介紹了python__name__原理及用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Python協(xié)程原理全面分析

    Python協(xié)程原理全面分析

    協(xié)程(co-routine,又稱微線程、纖程)是一種多方協(xié)同的工作方式。協(xié)程不是進程或線程,其執(zhí)行過程類似于Python函數(shù)調用,Python的asyncio模塊實現(xiàn)的異步IO編程框架中,協(xié)程是對使用async關鍵字定義的異步函數(shù)的調用
    2023-02-02

最新評論

忻州市| 焉耆| 新闻| 交口县| 永和县| 英山县| 柯坪县| 孟津县| 石景山区| 虎林市| 荔浦县| 墨竹工卡县| 海晏县| 东阳市| 寿光市| 临邑县| 定边县| 凯里市| 龙川县| 黄石市| 东平县| 龙泉市| 无锡市| 南投市| 神木县| 上饶市| 溧阳市| 简阳市| 长汀县| 新巴尔虎左旗| 九江市| 柳河县| 改则县| 南丹县| 孟津县| 青铜峡市| 中江县| 高平市| 乐至县| 手游| 宽甸|