您好,登錄后才能下訂單哦!
小編給大家分享一下Python類和對象怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
說是要“找對象”,我們第一個看的卻是個叫作“類”的語法結構。這里的類其實和我們日常生活中的“類”的概念差不多。日常生活中,我們把相近的東西歸為一類,而且給這個類起一個名字。比如說,鳥類的共同屬性是有羽毛,通過產卵生育后代。任何一只特別的鳥都是建立在鳥類的原型基礎上的。
下面我們用Python 語言來記錄上面的想法,描述鳥類:
class Bird(object): feather = True reproduction = "egg"
在這里,我們用關鍵字class 來定義一個類。類的名字就是鳥(Bird)。括號里有一個關鍵詞object,也就是“東西”的意思,即某一個個體。在計算機語言中,我們把個體稱為對象。一個類別下,可以有多個個體。鳥類就可以包括鄰居老王養的金絲雀、天邊正飛過的那只烏鴉,以及家里養的一只小黃雞。
冒號和縮進說明了屬于這個類的代碼。在隸屬于這個類別的程序塊中,我們定義了兩個量,一個用于說明鳥類有羽毛(feather),另一個用于說明鳥類的繁殖方式(reproduction),這兩個量稱為類的屬性(attribute)。我們定義鳥類的方法很粗糙,鳥類只不過是“有毛能產蛋”的東西。要是生物學家看到了大概會暗自搖頭,但我們畢竟邁出了模擬世界的第一步。
我們除了用數據性的屬性來分辨類別外,有時也會根據這類東西能做什么事情來區分。比如說,鳥會移動。這樣,鳥就和房屋的類別就區分開了。這些動作會帶來一定的結果,比如移動導致位置的變化。這樣的一些“行為”屬性稱為方法(method)。Python 中,一般通過在類的內部定義函數來說明方法。
class Bird(object): feather = True reproduction = "egg" def chirp(self, sound): print(sound)
我們給鳥類新增一個方法屬性,就是表示鳥叫的方法chirp()。方法chirp()看起來很像一個函數。它的第一個參數是self,是為了在方法內部引用對象自身,我將在后面詳細解釋。需要強調的是,無論該參數是否用到,方法的第一個參數必須是用于指代對象自身的self。剩下的參數sound 是為了滿足我們的需求設計的,它代表了鳥叫的內容。方法chirp()會把sound 打印出來。
我們定義了類,但和函數定義一樣,這還只是打造兵器的過程。為了使用這個利器,我們需要深入到對象的層面。通過調用類,我們可以創造出這個類下面的一個對象。比如說,我養了一只小雞,叫summer。它是個對象,且屬于鳥類。我們使用前面已經定義好的鳥類,產生這個對象:
summer = Bird()
通過這一句創建對象,并說明summer 是屬于鳥類的一個對象。現在,我們就可以使用鳥類中已經寫好的代碼了。作為對象的summer 將擁有鳥類的屬性和方法。對屬性的引用是通過對象.屬性(object.attribute)的形式實現的。比如說:
print(summer.reproduction) # 打印'egg'
用上面的方式,我們得到summer 所屬類的繁殖方式。
此外,我們還可以調用方法,讓summer 執行鳥類允許的動作。比如:
summer.chirp("jijiji") # 打印'jijiji'
在調用方法時,我們只傳遞了一個參數,也就是字符串”jijiji”。這正是方法與函數有所區別的地方。盡管在定義類的方法時,我們必須加上這個self 參數,但self 只用能在類定義的內部,所以在調用方法時不需要對self 傳入數據。通過調用chirp()方法,我的summer 就可以叫了。
到現在為止,描述對象的數據都存儲于類的屬性中。類屬性描述了一個類的共性,比如鳥類都有羽毛。所有屬于該類的對象會共享這些屬性。比如說,summer 是鳥類的一個對象,因此summer 也有羽毛。當然,我們可以通過某個對象來引用某個類屬性。
對于一個類下的全部個體來說,某些屬性可能存在個體差異。比如說,我的summer 是黃色的,但并非所有的鳥兒都是黃色的。再比如說人這個類。性別是某個人的一個性質,不是所有的人類都是男,或者都是女。這個性質的值隨著對象的不同而不同。李雷是人類的一個對象,性別是男。韓美美也是人類的一個對象,性別是女。
因此,為了完整描述個體,除了共性的類屬性外,我們還需要用于說明個性的對象屬性。在類中,我們可以通過self 來操作對象的屬性。現在我們拓展Bird 類:
class Bird(object): def chirp(self, sound): print(sound) def set_color(self, color): self.color = color summer = Bird() summer.set_color("yellow") print(summer.color) # 打印'yellow'
在方法set_color()中,我們通過self 參數設定了對象的屬性color。和類屬性一樣,我們能通過對象.屬性的方式來操作對象屬性。由于對象屬性依賴于self,所以我們必須在某個方法內部才能操作類屬性。因此,對象屬性沒辦法像類屬性一樣,在類下方直接賦初值。
但Python 還是提供了初始化對象屬性的辦法。Python 定義了一系列特殊方法。特殊方法又被稱為魔法方法(Magic Method)。特殊方法的方法名很特別,前后有兩個下畫線,比如init()、add()、dict()等。程序員可以在類定義中設定特殊方法。Python 會以特定的方式來處理各個特殊方法。對于類的init()方法,Python 會在每次創建對象時自動調用。因此,我們可以在init()方法內部來初始化對象屬性:
class Bird(object): def __init__(self, sound): self.sound = sound print("my sound is:", sound) def chirp(self): print(self.sound) summer = Bird("ji") summer.chirp() # 打印'ji'
在上面的類定義中,我們通過init()方法說明了這個類的初始化方式。每當對象建立時,比如創建summer 對象時,init()方法就會被調用。它會設定sound 這個對象屬性。在后面的chirp()方法中,就可以通過self 調用這一對象屬性。除了設定對象屬性外,我們還可以在init()中加入其他指令。這些指令會在創建對象時執行。在調用類時,類的后面可以跟一個參數列表。這里放入的數據將傳給init()的參數。通過init()方法,我們可以在創建對象時就初始化對象屬性。
除了操作對象屬性外,self 參數還有另外一個功能,就是能讓我們在一個方法內部調用同一類的其他方法,比如:
class Bird(object): def chirp(self, sound): print(sound) def chirp_repeat(self, sound, n): for i in range(n): self.chirp(sound) summer = Bird() summer.chirp_repeat("ji", 10) # 重復打印'ji'10 次
在方法chirp_repeat()中,我們通過self 調用了類中的另一個方法chirp()。
以上是“Python類和對象怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。