摘要:小栗子對于可樂來講,只要是同一個品牌的可樂,他們就有著同樣的成分,這被稱之為配方。小栗子對于可樂來說,按照配方把可樂生產出來的過程就是實例化的過程。小栗子類的屬性與正常的變量并無區別。
我是栗子,帶大家從零開始學習Python,希望每篇文章都能讓你收獲滿滿!
今天我們要說的是面向對象的核心-----類,類能幫我們把復雜的事情變得有條理,有順序,希望大
家通過學習類能改善自己的編碼風格,使代碼變得更為好看,更加通俗易懂。
生物有不同的種類,食物有不同的種類,人類社會的種種商品也有不同的種類。但凡可被稱之為一
類的物體,他們都有著相似的特征和行為方式。用編程表示就是“類”(class)。
類是有一些系列有共同特征和行為事物的抽象概念的總和。
當我們使用類的時候,首先需要創建一個類。使用關鍵字class可以做到這點;你還需要給這個類
起個名字和繼承關系。
小栗子:
對于可樂來講,只要是同一個品牌的可樂,他們就有著同樣的成分,這被稱之為配方。我們用
Python 中的類來表達這件事:
class CocaCola: formula = ["caffeine","sugar","water","soda"]
我們繼續按照定義好的配方(類)來生產可樂。只要配方一樣味道都是相同的。
coke_for_me = CocaCola()coke_for_you = CocaCola()
在左邊我們創建一個變量,右邊寫上類的名稱,這樣看起來很像是賦值的行為,我們稱之為類的實例化。而被實例化后的對象,我們稱之為實例(instance),或者說是類的實例。
小栗子:
對于可樂來說,按照配方把可樂生產出來的過程就是實例化的過程。
print(CocaCola.formula)print(coke_for_me.formula)print(coke_for_you.formula)
運行結果:
>>> ["caffeine","sugar","water","soda"]>>> ["caffeine","sugar","water","soda"]>>> ["caffeine","sugar","water","soda"]
在類的名字后面輸入?.
,IDE 就會自動聯想出我們之前在定義類的時候寫在里面的屬性,而這就是
類屬性的引用(attribute references)。類的屬性會被所有類的實例共享,所以當你在類的實例后面
再點上?.
?,索引用的屬性值是完全一樣的。
小栗子:
類的屬性與正常的變量并無區別。
for element in coke_for_me.formula: print(element)
運行結果:
>>> caffeine>>> sugar>>> water>>> soda
在創建了類之后,通過?object.new_atrr
的形式進行一個賦值,于是我們就得到了一個新的實例的變量,實例的變量就是實例變量,而實例變量有一個專有的術語,我們稱之為實例屬性(Instance Atrribute)。
小栗子:
通過下面的代碼,我們給在中國生產的可口可樂貼上了中文字樣的“可口可樂”標簽,同樣的配方,不一樣的名稱,就帶來了不同的效果,中文的可樂變得更加受歡迎!
這說明生產的過程中有必要做一些獨有的本地化調整:
class CocaCola: formula = ["caffeine","sugar","water","soda"]coke_for_China = CocaCola()coke_for_China.local_logo = "可口可樂" #創建實例屬性print(coke_for_China.local_logo) #打印實例屬性引用結果
運行結果:
>>> 可口可樂
類的實例可以引用屬性,方法就是函數,但我們把這個函數稱之為方法(Method)。
方法是供實例使用的,因此我們還可以稱之為實例方法(Instance Method)。
小栗子:
當你喝掉一瓶可樂的時候,你會從咖啡因和大量的糖分中獲得能量,如果使用類的方法來表示可樂的這個“功能”的話,那應該是這樣的:
class CocaCola: formula = ["caffeine","sugar","water","soda"] def drink(self): print("Energy!") coke = CocaCola()coke.drink()
運行結果:
>>> Energy!
我知道你現在的關注點一定在這個奇怪的地方——似乎沒有派上任何用場的?self
?參數。我們來說明一下原理,其實很簡單,我們不妨修改一下代碼:
class CocaCola: formula = ["caffeine","sugar","water","soda"] def drink(coke): # HERE! print("Energy!") coke = CocaCola()coke.drink()
運行結果:
>>> Energy!
怎么樣,現在有些頭緒了吧?和你想的一樣,這個參數其實就是被創建的實例本身!就是將一個個對象作為參數放入函數括號內。
再進一步說,一旦一個類被實例化,那么我們其實可以同樣使用原來的方式:
coke = CocaColacoke.drink() == CocaCola.drink(coke) #左右兩邊的寫法完全一致
被實例化的對象會被編譯器默默地傳入后面方法的括號中,作為第一個參數。
上面這兩種方法是一樣的,但是我們更多地會寫成前面那種形式。
其實?self
?這個參數名稱是可以隨意修改名稱的(編譯器并不會因此而報錯),但是按照 Python 的
規矩,我們還是統一使用?self
。
時代在變遷,可樂的種類也在變化我們按照最新的來定于:
class CocaCola: calories = 140 sodium = 45 total_carb = 39 caffeine = 34 ingredients = [ "High Fructose Corn Syrup", "Carbonated Water", "Phosphoric Acid", "Natural Flavors", "Caramel Color", "Caffeine" ] def __init__(self,logo_name): self.local_logo = logo_name def drink(self): print("You got {} cal energy!".format(self.calories))
不同的本地化策略和新的種類的開發,使得生產并非僅僅是換個標簽這么簡單了,包裝、容積、甚至是配方都會發生變化,但唯一不變的是:它們永遠是可口可樂。
所有的子品類都會繼承可口可樂的品牌,Python 中類自然也有對應的概念,叫做類的繼承
(inheritance),我們拿無咖可樂(CAFFEINE-FREE)作為例子:
class CaffeineFree(CocaCola): caffeine = 0 ingredients = [ "High Fructose Corn Syrup", "Carbonated Water", "Phosphoric Acid", "Natural Flavors", "Caramel Color", ]coke_a = CaffeineFree("Cocacola-FREE")coke_a.drink()
我們在新的類 CaffeineFree 后面的括號中放入 CocaCola,這就表示這個類是繼承于 CocaCola 這
個父類的,而 CaffeineFree 則成為了 CocaCola 子類。類中的變量和方法可以完全被子類繼承,
但如需有特殊的改動也可以進行覆蓋(override)。
可以看到CAFFEINE-FREE存在著咖啡因含量、成分這兩處不同的地方,并且在新的類中也僅僅是
重寫了這兩個地方,其他沒有重寫的地方,方法和屬性都能照常使用。
哈哈哈 !文寫到這里結束了,下一篇入門到實戰的系列大概率會寫第三方模塊的一些東西,如果
有這方面還不是很清楚的小可愛,可以提前預約下~
源碼基地:點擊藍色字體或私信小編06即可免費拿!往期源碼也都在地哦~
想跟大家一起交流學習滴可以加入我的公眾號關注下哈:Python顧木子吖!
歡迎一起學習交流、往期的文章內容項目素材源碼等都在里面可以找到滴!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/123371.html
必須要看的前言 本文風格:以??簡單易懂??的語言帶你徹底搞懂KNN,了解什么是有監督學習算法。 認真看完這篇文章,徹底了解KNN、了解監督學習算法絕對是一樣很簡單的事情。 注:本篇文章非常詳細,同時我也附加了Python代碼,歡迎收藏后慢慢閱讀。 目錄 必須要看的前言監督學習算法KNN/K近鄰算法1 算法原理1.1 實現過程1.2 距離的確定 2 算法的優缺點3 算法的變種3.1 變...
本文涵蓋 面試題的引入 對事件循環面試題執行順序的一些疑問 通過面試題對微任務、事件循環、定時器等對深入理解 結論總結 面試題 面試題如下,大家可以先試著寫一下輸出結果,然后再看我下面的詳細講解,看看會不會有什么出入,如果把整個順序弄清楚 Node.js 的執行順序應該就沒問題了。 async function async1(){ console.log(async1 start) ...
摘要:本文的分享主要圍繞以下幾個方面能做什么常見應用場景介紹如何學習語法基礎實戰面向對象編程實戰練熟基礎小游戲項目的實現與實戰一能做什么一種編程語言往往可以應用于多方面,有些方面比較常用,有些方面極為常用。比如表示是一個空列表。 摘要:Python語言的教程雖然隨處可見,但是忙于日常業務/學習的你或許:一直想要找個時間學一點,但是又不知道該從何下手?本文將從Python能做什么,如何學習Py...
閱讀 2856·2021-11-22 11:56
閱讀 3559·2021-11-15 11:39
閱讀 903·2021-09-24 09:48
閱讀 763·2021-08-17 10:14
閱讀 1329·2019-08-30 15:55
閱讀 2757·2019-08-30 15:55
閱讀 1314·2019-08-30 15:44
閱讀 2783·2019-08-30 10:59