日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

第7.4節(jié) Python中與眾不同的類

系統(tǒng) 1806 0

一、?? ?引言
在較舊的Python版本中,類型和類之間涇渭分明:內(nèi)置對象是基于類型的,而自定義對象是基于類的。因此,你可以創(chuàng)建類,但不能創(chuàng)建類型。在較新的Python 2版本中,這種差別不那么明顯。在Python 3中,已不再區(qū)分類和類型了,類就是類型,類型就是類,如int型就是class(int)。
首先聲明,除非特殊說明本章所有關(guān)于類的知識都是基于Python3.73的版本來的,有些內(nèi)容在低版本特別是Python3.0以下的Python中不支持。

二、?? ?語法
1.?? ?創(chuàng)建自定義類的語法
class 類名:
執(zhí)行語句...
零個到多個類變量...
零個到多個方法...
3、?? ?語法說明:Python 的類定義由類頭(指 class 關(guān)鍵字、類名和冒號)和統(tǒng)一縮進的類體構(gòu)成,在類體中最主要的兩個成員就是類變量和方法。如果不為類定義任何類變量和方法,那么這個類就相當(dāng)于一個空類,如果空類不需要其他可執(zhí)行語句,則可使用 pass 語句作為占位符。
1)?? ?class關(guān)鍵字:class為類定義的聲明關(guān)鍵字,類定義創(chuàng)建獨立的命名空間,用于在其中定義函數(shù)和變量,這些函數(shù)和變量就是類和實例的方法和屬性;
2)?? ?類名:必須是一個合法的Python標識符(只能由字母、數(shù)字和下劃線(_)構(gòu)成,且不能以數(shù)字打頭,且下劃線開頭的名稱有特殊含義,一般不使用)。Python推薦的命名規(guī)范,要求類名遵循駝峰命名法,即類名必須是由一個或多個有意義的單詞連綴而成的,每個單詞首字母大寫,其他字母全部小寫,單詞與單詞之間不要使用任何分隔符;
3)?? ?類體:類體與函數(shù)體類似,在類頭后接統(tǒng)一縮進的類體,可以有單獨的類代碼,可以有變量和函數(shù),不過類中的函數(shù)稱為方法;
4)?? ?類定義說明文檔:與函數(shù)文檔字符串類似,Python 也允許為類定義文檔字符串,文檔字符串放在類聲明之后、類體之前,如上面程序中第二行的字符串所示。

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

三、?? ?類的主要特征
1.?? ?Python 類所包含的最重要的兩個成員就是變量和方法,類中各成員之間的定義順序沒有任何影響,各成員之間可以相互調(diào)用;
2.?? ?類中定義的方法包括方法則用于定義該類或?qū)嵗龑ο蟮男袨榛蚬δ軐崿F(xiàn),類中的方法包括類方法、靜態(tài)方法和實例方法。在后面章節(jié)單獨介紹;
3.?? ?類所包含的變量又分為類變量和實例變量,類體中定義的變量為類變量,實例變量是實例方法中定義的self對象的變量,對于每個實例都是獨有數(shù)據(jù),而類變量是該類所有實例共享的屬性和方法:
1)?? ?類變量屬于類本身,用于定義該類本身所包含的狀態(tài)數(shù)據(jù);
2)?? ?實例變量則屬于該類的對象,用于定義對象所包含的狀態(tài)數(shù)據(jù)。
關(guān)于類變量和實例變量,在后面章節(jié)單獨介紹。
4.?? ?在class語句中定義的代碼都是在一個特殊的命名空間(類的命名空間)內(nèi)執(zhí)行的,而類的所有成員都可訪問這個命名空間。類定義其實就是要執(zhí)行的代碼段,類體中的代碼(未在方法中的代碼)在類定義時執(zhí)行,當(dāng)定義實例變量時類體中的代碼不會再執(zhí)行,這個與函數(shù)體中的代碼完全不同;
5.?? ?類還可以支持在類體中定義類,不過這種模式使用場景基本沒有,在此不展開說明;
6.?? ?Python中類的構(gòu)造方法是:__init__,構(gòu)造方法用于構(gòu)造該類的對象,Python 通過調(diào)用構(gòu)造方法返回該類的對象。構(gòu)造方法在定義實例對象時執(zhí)行,也就是當(dāng)類被實例化的時候就會執(zhí)行該函數(shù),__init__()方法是可選的,如果不提供,Python 會給出默認的__init__方法;
7.?? ?Python中類的析構(gòu)方法是:__del__,當(dāng)使用del 刪除對象時,會調(diào)用他本身的析構(gòu)函數(shù),另外當(dāng)對象在某個作用域中調(diào)用完畢,在跳出其作用域的同時析構(gòu)函數(shù)也會被調(diào)用一次,這樣可以用來釋放內(nèi)存空間。__del__()也是可選的,如果不提供,則Python 會在后臺提供默認析構(gòu)函數(shù)如果要顯式的調(diào)用析構(gòu)函數(shù),可以使用del關(guān)鍵字,方式如下:del對象名
8.?? ?Python類所包含的類變量和實例變量都可以動態(tài)增加或刪除:
1)?? ?程序也可在任何地方通過賦值語句為已有的類和實例增加變量;程序可通過 del 語句刪除己有類的類變量和實例變量;
2)?? ?程序中可以動態(tài)調(diào)整類定義,后定義的類定義將覆蓋原有的類定義;
3)?? ?程序調(diào)整類的類變量、實例變量和類定義后,已有的類的實例不受影響,如在類中刪除一個實例變量a、類變量c、刪除方法f后,原有的實例中還能看到a、c、f,同樣新增的類變量、實例變量、類方法、實例方法,原有的實例不能使用。
9.?? ?類中所有方法的全局空間和類本身的全局空間是同一個,但二者的局部名字空間不同。類中所有方法中的局部名字空間與全局名字空間和類本身的局部名字空和全局名字空的關(guān)系與函數(shù)和函數(shù)調(diào)用環(huán)境中局部名字空間和全局名字空間的關(guān)系一樣。

四、?? ?類定義舉例
以上節(jié)介紹的鴨子類進行擴展來舉例說明類的定義方法:

            
              class Duck():
? print("現(xiàn)在執(zhí)行Duck類類體代碼,開始定義類構(gòu)造函數(shù)")
? def __init__(self):
? ? ?self.sex='公鴨'
? ? ?self.age=1
? ? ?print("構(gòu)造函數(shù)執(zhí)行完畢!")
? print("現(xiàn)在定義walk方法") ? ?
? def walk(self):
? ? print('I walk like a duck')
? print("現(xiàn)在定義swim方法")?
? def swim(self):
? ? print('I swim like a duck')
? print("現(xiàn)在定義quack方法")?
? def quack(self):
? ? print('I quack like a duck')
? print("現(xiàn)在定義類析構(gòu)函數(shù)")
? def __del__(self):
? ? ? print("Duck對象析構(gòu)函數(shù)執(zhí)行")
            
          

第7.4節(jié) Python中與眾不同的類_第1張圖片
? ? ?
? ? 可以看到,類定義時,類體中沒在方法外的代碼全部執(zhí)行,定義實例對象時,會執(zhí)行構(gòu)造函數(shù),實例回收時執(zhí)行析構(gòu)函數(shù),但不能直接通過”類名.方法”方式執(zhí)行實例方法。

? ? ?本節(jié)介紹的相關(guān)知識都是基于Python3的,實際上在Python3之前有舊式類和新式類的說法,且在Python 3之前默認創(chuàng)建的是舊式類,在較舊的Python版本中,要創(chuàng)建新式類,應(yīng)在腳本或模塊開頭放置賦值語句__metaclass__ = type。當(dāng)然,還有其他解決方案,如從新式類(如object)派生出子類。Python 3,就無需考慮這一點,因為根本沒有舊式類了。因此關(guān)于這部分內(nèi)容就不展開說了。

? ? Python的類之所以說與眾不同,因為它的構(gòu)造方法、析構(gòu)方法、類方法和實例方法、封裝模式、類體代碼,還有后面要提到或介紹的__new__方法、靜態(tài)方法、裝飾器、動態(tài)定義屬性和方法等等,都與很多語言有很大的不同,因此說與眾不同。
本節(jié)介紹了Python中類的語法、構(gòu)成及各部分的特征,有關(guān)內(nèi)容涉及面較廣,如果大家不好理解,建議自己多找點資料看看。
老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介紹老猿學(xué)習(xí)Python后總結(jié)的學(xué)習(xí)經(jīng)驗,這些經(jīng)驗有助于沒有接觸過Python的程序員可以很容易地進入Python的世界。
歡迎大家批評指正,謝謝大家關(guān)注!


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 内黄县| 星座| 安庆市| 涿鹿县| 武乡县| 南召县| 安达市| 桃江县| 潮州市| 始兴县| 湖南省| 韶关市| 冀州市| 当雄县| 开封市| 融水| 新化县| 饶阳县| 肃宁县| 宁波市| 安顺市| 海晏县| 祥云县| 三江| 建湖县| 武城县| 赫章县| 许昌市| 凭祥市| 弥勒县| 天水市| 安溪县| 霍山县| 济源市| 文昌市| 山西省| 额敏县| 勐海县| 启东市| 海晏县| 池州市|