和小家伙一起學(xué)編程 005 對(duì)象

學(xué)習(xí)編程的過程中溪烤,漸漸的罚攀,我們就會(huì)遇到一些更復(fù)雜抽象的概念。

比如兽狭,面向?qū)ο蟮木幊蹋∣bject-oriented programming)萧朝。這是目前主流的編程思想岔留,或者編程方法之一夏哭。

面向?qū)ο蟮母拍罴旒恚畛跏窃?950s~1960s年代的MIT(麻省理工學(xué)院)提出的,用于人工智能和圖形交互界面。

舉一個(gè)簡(jiǎn)單的例子何址,我們要做一個(gè)猜動(dòng)物的小游戲:

涉及三類動(dòng)物里逆,哺乳動(dòng)物、鳥類用爪、爬行動(dòng)物原押,每一類有幾種動(dòng)物的例子,比如馬偎血、貓诸衔、大象、蝙蝠颇玷、鴨嘴獸笨农、鸚鵡、 鵝帖渠、烏龜谒亦、科莫多龍等等。

每一類動(dòng)物具有一些共同的特征空郊,比如有四條腿份招、有翅膀、可以飛行狞甚、通過哺乳喂養(yǎng)幼崽等等……

我們可以將每種動(dòng)物的每一個(gè)特征都詳細(xì)列出來(lái)锁摔,但是這很麻煩,有很多重復(fù)勞動(dòng)哼审;我們也可以先把某一類動(dòng)物的共同特征列出來(lái)鄙漏,指出某種動(dòng)物屬于某一類,然后只要說(shuō)明它獨(dú)特的部分就行了棺蛛。

我們創(chuàng)建一些類怔蚌,描述它們的屬性和方法,還可以創(chuàng)造子類以及子類的子類旁赊,比如哺乳動(dòng)物類桦踊,貓科動(dòng)物子類,家貓子類(我們并沒有使用生物學(xué)上嚴(yán)格的分類方法终畅,只是舉個(gè)例子)籍胯;我們可以創(chuàng)建這些類或子類的對(duì)象,比如小明家的加菲貓……

這種分類創(chuàng)建對(duì)象來(lái)構(gòu)建和組織代碼編程的方法离福,就是面向?qū)ο缶幊塘恕?/p>

因?yàn)檫@符合我們看待世界和解決某些問題的思維方式杖狼,所以這樣編程是有效的,特別是適合圖形交互界面編程妖爷,以及大型的團(tuán)隊(duì)合作編程蝶涩。

說(shuō)到這里,來(lái)看看個(gè)人電腦早期的經(jīng)典APPLE II的圖形界面吧:

Apple II GUI

順便推薦兩本書:

我是沃茲

我是沃茲: 一段硅谷和蘋果的悲情羅曼史

黑客

黑客:計(jì)算機(jī)革命的英雄(二十五周年新版)

Scratch中沒有類的概念,但是每個(gè)角色都是一個(gè)對(duì)象绿聘,它們有自己的屬性嗽上,比如位置、大小熄攘、顏色特效等兽愤,可以為每個(gè)角色編寫代碼,讓它們按照我們的設(shè)想行動(dòng)挪圾,與我們交互浅萧,它們之間還可以通過廣播來(lái)發(fā)送和接收消息,我們可以在編輯時(shí)復(fù)制哲思、在程序運(yùn)行時(shí)克隆這些角色(或者說(shuō)對(duì)象)惯殊。這些在之前的例子中都出現(xiàn)了,不舉例了也殖。

或者土思,跳一下去看《007 算法》的例子吧。

Python呢忆嗜,有句話說(shuō)己儒,在Python中,一切皆對(duì)象捆毫。

Python 關(guān)于對(duì)象的例子

編輯文件oop.py:

# 定義哺乳動(dòng)物類
class mammal:
    # 哺乳動(dòng)物哺乳
    lactation = True
    def tell(self):
        print("我是哺乳動(dòng)物闪湾!")

# 定義貓科動(dòng)物類(哺乳動(dòng)物的子類)
class felid(mammal):
    # 貓科動(dòng)物是肉食的
    carnivorous = True
    def tell(self):
        print("我是貓科動(dòng)物!")
    
# 定義貓類(貓科動(dòng)物的子類)
class cat(felid):
    name = ""
    # 貓捕鼠
    mouse_hunting = True
    def __init__(self, name):
        felid.__init__(self)
        self.name = name
    def tell(self):
        print("我是貓绩卤!")
    def about(self):
        print("我是一只名叫\(zhòng)"%s\"的貓途样!" % (self.name))

運(yùn)行oop.py(每次運(yùn)行id的數(shù)字會(huì)不同,不用管他):

>>> elephant = mammal()
>>> id(elephant)
3102587337528
>>> type(elephant)
<class '__main__.mammal'>
>>> elephant.lactation
True
>>> elephant.tell()
我是哺乳動(dòng)物濒憋!
>>> tiger = felid()
>>> id(tiger)
3102586816328
>>> type(tiger)
<class '__main__.felid'>
>>> tiger.lactation
True
>>> tiger.carnivorous
True
>>> tiger.tell()
我是貓科動(dòng)物何暇!
>>> tom = cat("Tom")
>>> id(tom)
3102587479600
>>> type(tom)
<class '__main__.cat'>
>>> tom.lactation
True
>>> tom.carnivorous
True
>>> tom.mouse_hunting
True
>>> tom.tell()
我是貓!
>>> tom.about()
我是一只名叫"Tom"的貓凛驮!
>>> 

python中的對(duì)象都符合三個(gè)特征:

id裆站,可以當(dāng)中機(jī)器中區(qū)分每個(gè)對(duì)象的門牌號(hào)碼,可以用id()這個(gè)方法來(lái)查詢黔夭;

type宏胯,即對(duì)象所屬的類,可以用type()方法來(lái)查詢;

對(duì)象的值本姥,可以說(shuō)是對(duì)象包含的數(shù)據(jù)肩袍。

這些,從上面的例子就可以看到了婚惫。那么氛赐,為什么說(shuō)在Python中一切皆對(duì)象呢魂爪?

來(lái)試試看吧:

>>> a = 123
>>> id(a)
1805024544
>>> type(a)
<class 'int'>
>>> b = "two words"
>>> id(b)
3102587445040
>>> type(b)
<class 'str'>
>>> id(id)
3102548261840
>>> type(id)
<class 'builtin_function_or_method'>
>>> id(type)
1804583984
>>> type(type)
<class 'type'>

節(jié)點(diǎn)目錄

和小家伙一起學(xué)編程 000 出發(fā)

和小家伙一起學(xué)編程 001 條件

和小家伙一起學(xué)編程 002 循環(huán)

和小家伙一起學(xué)編程 003 隨機(jī)

和小家伙一起學(xué)編程 004 編碼

和小家伙一起學(xué)編程 005 對(duì)象

和小家伙一起學(xué)編程 006 函數(shù)

和小家伙一起學(xué)編程 007 算法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鹰祸,隨后出現(xiàn)的幾起案子甫窟,更是在濱河造成了極大的恐慌密浑,老刑警劉巖蛙婴,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異尔破,居然都是意外死亡街图,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門懒构,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)餐济,“玉大人,你說(shuō)我怎么就攤上這事胆剧⌒跄罚” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵秩霍,是天一觀的道長(zhǎng)篙悯。 經(jīng)常有香客問我,道長(zhǎng)铃绒,這世上最難降的妖魔是什么鸽照? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮颠悬,結(jié)果婚禮上矮燎,老公的妹妹穿的比我還像新娘。我一直安慰自己赔癌,他們只是感情好诞外,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著灾票,像睡著了一般浅乔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铝条,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天靖苇,我揣著相機(jī)與錄音,去河邊找鬼班缰。 笑死贤壁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的埠忘。 我是一名探鬼主播脾拆,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼馒索,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了名船?” 一聲冷哼從身側(cè)響起绰上,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渠驼,沒想到半個(gè)月后蜈块,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迷扇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年百揭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜓席。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡器一,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出厨内,到底是詐尸還是另有隱情祈秕,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布雏胃,位于F島的核電站请毛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏丑掺。R本人自食惡果不足惜获印,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望街州。 院中可真熱鬧兼丰,春花似錦、人聲如沸唆缴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)面徽。三九已至艳丛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間趟紊,已是汗流浹背氮双。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霎匈,地道東北人戴差。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像铛嘱,于是被迫代替她去往敵國(guó)和親暖释。 傳聞我的和親對(duì)象是個(gè)殘疾皇子袭厂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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