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ù)稱為方法浮毯;你前面學到的有關函數(shù)的一切都適用于方法完疫,就目前而言,唯一重要的差別是調用方法的方式债蓝。方法__init__()是一個特殊的方法壳鹤,每當你根據(jù)Dog類創(chuàng)建新實例時,Python都會自動運行它饰迹。在這個方法的名稱中器虾,開頭和末尾各有兩個下劃線讯嫂,這是一種約定,旨在避免Python默認方法與普通方法發(fā)生名稱沖突兆沙。
? ? ? ? 我們將方法__init__()定義成了包含三個形參:self、name和age莉掂。在這個方法的定義中葛圃,形參self必不可少,還必須位于其他形參的前面憎妙。為何必須在方法定義中包含形參self呢库正?因為Python調用這個__init__()方法來創(chuàng)建Dog實例時,將自動傳入實參self厘唾。每個與類相關聯(lián)的方法調用都自動傳遞實參self褥符,它是一個指向實例本身的引用,讓實例能夠訪問類中的屬性和方法抚垃。我們創(chuàng)建Dog實例時喷楣,Python將調用Dog類的方法__init__()。我們將通過實參向Dog()傳遞名字和年齡鹤树;self會自動傳遞铣焊,因此我們不需要傳遞它。每當我們根據(jù)Dog類創(chuàng)建實例時罕伯,都只需給最后兩個形參(name和age)提供值曲伊。
? ? ? ? ?以self為前綴的變量都可供類中的所有方法使用,我們還可以通過類的任何實例來訪問這些變量追他。self.name = name獲取存儲在形參name中的值坟募,并將其存儲到變量name中,然后該變量被關聯(lián)到當前創(chuàng)建的實例邑狸。self.age = age的作用與此類似懈糯。像這樣可通過實例訪問的變量稱為屬性。
? ? ? ? ?Dog類還定義了另外兩個方法:sit()和roll_over()推溃。由于這些方法不需要額外的信息昂利,如名字或年齡,因此它們只有一個形參self铁坎。我們后面將創(chuàng)建的實例能夠訪問這些方法蜂奸,換句話說,它們都會蹲下和打滾硬萍。當前扩所,sit()和roll_over()所做的有限,它們只是打印一條消息朴乖,指出小狗正蹲下或打滾祖屏。但可以擴展這些方法以模擬實際情況:如果這個類包含在一個計算機游戲中助赞,這些方法將包含創(chuàng)建小狗蹲下和打滾動畫效果的代碼。如果這個類是用于控制機器狗的袁勺,這些方法將引導機器狗做出蹲下和打滾的動作雹食。
? ? 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ù)赎离,并且返回搜索結果極其迅速《巳瑁“My”來自Monty女兒的名字梁剔,而“SQL”就是結構化查詢語言(Structured Query Language)的意思,是一種跟數(shù)據(jù)庫溝通的語言掠手。