9.1 創(chuàng)建和使用類
使用類幾乎可以模擬任何東西。下面來編寫一個表示小狗的簡單類Dog——它表示的不是特定的小狗,而是任何小狗。對于大多數(shù)寵物狗,我們都知道些什么呢?它們都有名字和年齡;我們還知道,大多數(shù)小狗還會蹲下和打滾。由于大多數(shù)小狗都具備上述兩項信息(名字和年齡)和兩種行為(蹲下和打滾),我們的Dog類將包含它們。這個類讓Python知道如何創(chuàng)建表示小狗的對象。編寫這個類后,我們將使用它來創(chuàng)建表示特定小狗的實例。
9.1.1 創(chuàng)建Dog類
根據(jù)Dog類創(chuàng)建的每個實例都將存儲名字和年齡。我們賦予了每條小狗蹲下(sit())和打滾(roll_over())的能力:

在Python中,首字母大寫的名稱指的是類。這個類定義中的括號是空的,因為我們要從空白創(chuàng)建這個
類。接著我們編寫了一個文檔字符串,對這個類的功能作了描述。
? ? 1. 方法__init__()
? ? ? ? 類中的函數(shù)稱為方法;你前面學(xué)到的有關(guān)函數(shù)的一切都適用于方法,就目前而言,唯一重要的差別是調(diào)用方法的方式。方法__init__()是一個特殊的方法,每當(dāng)你根據(jù)Dog類創(chuàng)建新實例時,Python都會自動運行它。在這個方法的名稱中,開頭和末尾各有兩個下劃線,這是一種約定,旨在避免Python默認(rèn)方法與普通方法發(fā)生名稱沖突。
? ? ? ? 我們將方法__init__()定義成了包含三個形參:self、name和age。在這個方法的定義中,形參self必不可少,還必須位于其他形參的前面。為何必須在方法定義中包含形參self呢?因為Python調(diào)用這個__init__()方法來創(chuàng)建Dog實例時,將自動傳入實參self。每個與類相關(guān)聯(lián)的方法調(diào)用都自動傳遞實參self,它是一個指向?qū)嵗旧淼囊茫寣嵗軌蛟L問類中的屬性和方法。我們創(chuàng)建Dog實例時,Python將調(diào)用Dog類的方法__init__()。我們將通過實參向Dog()傳遞名字和年齡;self會自動傳遞,因此我們不需要傳遞它。每當(dāng)我們根據(jù)Dog類創(chuàng)建實例時,都只需給最后兩個形參(name和age)提供值。
? ? ? ? ?以self為前綴的變量都可供類中的所有方法使用,我們還可以通過類的任何實例來訪問這些變量。self.name = name獲取存儲在形參name中的值,并將其存儲到變量name中,然后該變量被關(guān)聯(lián)到當(dāng)前創(chuàng)建的實例。self.age = age的作用與此類似。像這樣可通過實例訪問的變量稱為屬性。
? ? ? ? ?Dog類還定義了另外兩個方法:sit()和roll_over()。由于這些方法不需要額外的信息,如名字或年齡,因此它們只有一個形參self。我們后面將創(chuàng)建的實例能夠訪問這些方法,換句話說,它們都會蹲下和打滾。當(dāng)前,sit()和roll_over()所做的有限,它們只是打印一條消息,指出小狗正蹲下或打滾。但可以擴展這些方法以模擬實際情況:如果這個類包含在一個計算機游戲中,這些方法將包含創(chuàng)建小狗蹲下和打滾動畫效果的代碼。如果這個類是用于控制機器狗的,這些方法將引導(dǎo)機器狗做出蹲下和打滾的動作。
? ? 2. 在Python 2.7中創(chuàng)建類
class Dog(object):??
? ? ?--snip--
另:MySQL的初衷是存儲和管理大數(shù)據(jù)。如果有人想要跟蹤不同的數(shù)據(jù)點,他們互使用數(shù)據(jù)庫,也就是有點像微軟Excel那樣的東西。然而,隨著數(shù)據(jù)變得越來越大,查找Excel這樣的數(shù)據(jù)庫就會變得慢多了,也不再可靠。MySQL有能力存儲大量數(shù)據(jù),并且返回搜索結(jié)果極其迅速?!癕y”來自Monty女兒的名字,而“SQL”就是結(jié)構(gòu)化查詢語言(Structured Query Language)的意思,是一種跟數(shù)據(jù)庫溝通的語言。