Python 簡明教程 --- 18力奋,Python 面向?qū)ο?/h1>

代碼能借用就借用榜旦。

—— Tom Duff

目錄

編程可分為面向過程編程面向?qū)ο缶幊?/code>,它們是兩種不同的編程方式景殷,當(dāng)然背后的思維方式也是不同的溅呢。面向過程編程是一種傳統(tǒng)的編程方式,面向?qū)ο缶幊淌且粋€(gè)更高級的編程方式猿挚。

1咐旧,面向過程編程

面向過程編程(POP)的重點(diǎn)在于過程二字。

面向過程比較好理解绩蜻,就是按照人們通常的思維方式铣墨,在做一件事情的時(shí)候,將這件事情劃分為多個(gè)步驟办绝,一步一步來做伊约。

面向過程編程,就是在進(jìn)行一個(gè)項(xiàng)目時(shí)孕蝉,將這個(gè)項(xiàng)目分為多個(gè)小的步驟屡律,一個(gè)步驟就是一個(gè)過程,將這些過程全部組織起來降淮,就形成了完整的項(xiàng)目疹尾。

C 語言是典型的面向過程編程語言

比如,我們可以將我要去北京這件事情分為以下四個(gè)步驟:

  1. 去高鐵站
  2. 購買高鐵票
  3. 持票上高鐵
  4. 坐高鐵到北京

這里的每個(gè)步驟相當(dāng)于一個(gè)過程,我們將這些過程封裝成函數(shù),然后,從前到后將這些函數(shù)組織起來溢十,就完成了我要去北京這件事情尺锚。

我們將這個(gè)過程用簡單的代碼實(shí)現(xiàn)如下,將該代碼保存在to_beijing.py 文件中:

#! /usr/bin/env python3

def to_high_station():
    print('我到了高鐵站')

def buy_rail_tickets():
    print('我買了高鐵票')

def geton_high_rail():
    print('我坐上了高鐵')

def to_beijing():
    print('我到了北京')

if __name__ == '__main__':

    to_high_station()
    buy_rail_tickets()
    geton_high_rail()
    to_beijing()

在控制臺執(zhí)行命令舵变,如下:

$ python3 to_beijing.py 
我到了高鐵站
我買了高鐵票
我坐上了高鐵
我到了北京

2,面向?qū)ο缶幊?/h3>

面向?qū)ο笏枷?/strong>

面向?qū)ο缶幊蹋?code>OOP)的重點(diǎn)在與對象二字,主要的編程思想是圍繞對象展開面睛。

在思考一個(gè)項(xiàng)目的時(shí)候,將項(xiàng)目中的重要點(diǎn)/關(guān)鍵點(diǎn)都設(shè)計(jì)成一個(gè)個(gè)的尊搬,每個(gè)類承擔(dān)著不同的工作叁鉴,不同的功能被歸納到不同的類中。然后佛寿,由類產(chǎn)生出對象幌墓,這些對象之間的相互作用,最終組成了一個(gè)完整的項(xiàng)目冀泻。

類與對象

面向?qū)ο缶幊讨械膬蓚€(gè)非常重要概念是對象常侣,也是代碼復(fù)用的一種機(jī)制。

前面我們講到過弹渔,函數(shù)模塊都是代碼復(fù)用的機(jī)制胳施。

代表一類有著相同特征事物,是一個(gè)抽象的概念肢专。由同一個(gè)類產(chǎn)生的對象舞肆,有著相同的特性。比如人類都會行走博杖,會使用工具胆绊,需要呼吸和喝水,這都是人類的共性欧募。

對象產(chǎn)生压状,是一個(gè)類的實(shí)例,創(chuàng)建對象的過程跟继,叫做類的實(shí)例化种冬。對象是具體的,而不是抽象的舔糖。同一類的不同對象娱两,也有不同的屬性。比如人類金吗,有不同的性別十兢,姓名和年齡等趣竣,這都是人類的不同屬性。

設(shè)計(jì)模式是對面向?qū)ο缶幊?/code>的寶貴經(jīng)驗(yàn)的歸納總結(jié)旱物,讓我們可以更方便的運(yùn)用面向?qū)ο?/code>的思想來進(jìn)行編程工作遥缕。

面向?qū)ο笳Z言

Java 語言是完全的面向?qū)ο?/code>編程語言,因?yàn)樗械牟襟E都在中進(jìn)行宵呛。

C++ 語言是半面向?qū)ο?/code>編程語言单匣,它被稱為帶類的 C,即支持面向過程編程宝穗,又支持面向?qū)ο缶幊獭?/p>

Python 語言是一門腳本語言户秤,以簡單優(yōu)雅為設(shè)計(jì)理念,即可以面向過程編程逮矛,也可以面向?qū)ο缶幊碳牛幌馛++ 語言那樣有太多的復(fù)雜枯燥的概念,Python 語言更注重實(shí)用性须鼎。

面向?qū)ο笕筇卣?/strong>

封裝鲸伴,繼承多態(tài)是面向?qū)ο蟮娜筇卣鳎@三種特征都是面向?qū)ο?/code>編程語言自身提供的機(jī)制莉兰,可以讓我們更方便的進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì):

  • 封裝:讓用戶可以訪問需要的方法,禁止訪問不必要的方法礁竞,屏蔽了類內(nèi)部的復(fù)雜性糖荒。
  • 繼承:使得子類可以繼承父類的代碼,也是一種代碼復(fù)用手段模捂,增強(qiáng)了類與類之間的邏輯結(jié)果關(guān)系捶朵。同時(shí),繼承也是多態(tài)的必要條件狂男。
  • 多態(tài):一個(gè)事物(對象)可以表現(xiàn)多種形態(tài)综看,多態(tài)是面向?qū)ο缶幊讨校粋€(gè)非常強(qiáng)大的特性岖食。

面向?qū)ο缶幊?/strong>

我們?nèi)匀灰?code>我要去北京這件事來說明红碑,用面向?qū)ο缶幊?/code>是如何實(shí)現(xiàn)的。

面向?qū)ο缶幊痰闹攸c(diǎn)在于類的設(shè)計(jì)泡垃,如何將一個(gè)大的項(xiàng)目析珊,拆分為不同的,必要的類蔑穴。類的功能是單一的忠寻,而不是將不同的功能糅雜到一個(gè)類中。

首先存和,我們需要設(shè)計(jì)出一個(gè)奕剃,比如類名叫作SomeOne衷旅,這個(gè)至少需要有四項(xiàng)功能:

  • 去高鐵站
  • 購買高鐵票
  • 持票上高鐵
  • 坐高鐵到北京

我們需要將這四項(xiàng)功能,寫成四個(gè)方法纵朋,放在類SomeOne 中柿顶,代碼如下:

#! /usr/bin/env python3

# 定義一個(gè)類
class SomeOne:

    # 構(gòu)造函數(shù)
    def __init__(self, name):
        self.name = name

    def to_high_station(self):
        print('%s 到了高鐵站' % self.name)

    def buy_rail_tickets(self):
        print('%s 買了高鐵票' % self.name)

    def geton_high_rail(self):
        print('%s 坐上了高鐵' % self.name)

    def to_beijing(self):
        print('%s 到了北京' % self.name)

if __name__ == '__main__':

    # 創(chuàng)建一個(gè)類的對象
    i = SomeOne('小明')

    i.to_high_station()
    i.buy_rail_tickets()
    i.geton_high_rail()
    i.to_beijing()

將該代碼寫在文件SomeOne.py 中,在控制臺執(zhí)行命令倡蝙,如下:

$ python3 SomeOne.py 
小明 到了高鐵站
小明 買了高鐵票
小明 坐上了高鐵
小明 到了北京

在上面的代碼中九串,我們定義了一個(gè)名叫SomeOne 的類,其中包含了我們需要的四個(gè)方法寺鸥,另外還有一個(gè)__init__ 的方法猪钮,這是類的構(gòu)造函數(shù)(后續(xù)我們會詳細(xì)講解)。

__main__ 代碼塊中胆建,我們創(chuàng)建了SomeOne 類的對象i烤低,并調(diào)用了該對象的四個(gè)方法。

下一節(jié)笆载,我們來詳細(xì)介紹類與對象扑馁。

(完。)


推薦閱讀:

Python 簡明教程 ---13凉驻,Python 集合
Python 簡明教程 ---14腻要,Python 數(shù)據(jù)結(jié)構(gòu)進(jìn)階
Python 簡明教程 ---15,Python 函數(shù)
Python 簡明教程 ---16涝登,Python 高階函數(shù)
Python 簡明教程 ---17雄家,Python 模塊與包

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市胀滚,隨后出現(xiàn)的幾起案子趟济,更是在濱河造成了極大的恐慌,老刑警劉巖咽笼,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顷编,死亡現(xiàn)場離奇詭異,居然都是意外死亡剑刑,警方通過查閱死者的電腦和手機(jī)媳纬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來施掏,“玉大人层宫,你說我怎么就攤上這事∑浼啵” “怎么了萌腿?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抖苦。 經(jīng)常有香客問我毁菱,道長米死,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任贮庞,我火速辦了婚禮峦筒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窗慎。我一直安慰自己物喷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布遮斥。 她就那樣靜靜地躺著峦失,像睡著了一般。 火紅的嫁衣襯著肌膚如雪术吗。 梳的紋絲不亂的頭發(fā)上尉辑,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音较屿,去河邊找鬼隧魄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛隘蝎,可吹牛的內(nèi)容都是我干的购啄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼嘱么,長吁一口氣:“原來是場噩夢啊……” “哼狮含!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拱撵,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤辉川,失蹤者是張志新(化名)和其女友劉穎表蝙,沒想到半個(gè)月后拴测,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡府蛇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年集索,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汇跨。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡务荆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出穷遂,到底是詐尸還是另有隱情函匕,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布蚪黑,位于F島的核電站盅惜,受9級特大地震影響中剩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抒寂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一结啼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屈芜,春花似錦郊愧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至毅糟,卻和暖如春红选,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姆另。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工喇肋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人迹辐。 一個(gè)月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓蝶防,卻偏偏與公主長得像,于是被迫代替她去往敵國和親明吩。 傳聞我的和親對象是個(gè)殘疾皇子间学,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容