最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

習(xí)題 45: 對(duì)象、類、以及從屬關(guān)系

2023-08-30 17:00 作者:薄荷糖鳶  | 我要投稿


有一個(gè)重要的概念你需要弄明白,那就是“類(class)”和“對(duì)象(object)”的區(qū)別。問題在于,class 和 object 并沒有真正的不同。它們其實(shí)是同樣的東西,只是在不同的時(shí)間名字不同罷了。

我用禪語來解釋一下吧: 魚和泥鰍有什么區(qū)別? 這個(gè)問題有沒有讓你有點(diǎn)暈?zāi)??說真的,坐下來想一分鐘。我的意思是說,魚和泥鰍是不一樣,不過它們其實(shí)也是一樣的是不是?泥鰍是魚的一種,所以說沒什么不同,不過泥鰍又有些特別,它和別的種類的魚的確不一樣,比如泥鰍和黃鱔就不一樣。所以泥鰍和魚既相同又不同。怪了。 這個(gè)問題讓人暈的原因是大部分人不會(huì)這樣去思考問題,其實(shí)每個(gè)人都懂這一點(diǎn), 你無須去思考魚和泥鰍的區(qū)別,因?yàn)槟阒浪鼈冎g的關(guān)系。你知道泥鰍是魚的 一種,而且魚還有別的種類,根本就沒必要去思考這類問題。 讓我們更進(jìn)一步,假設(shè)你有一只水桶,里邊有三條泥鰍。假設(shè)你的好人卡多到?jīng)]地方用,于是你給它們分別取名叫小方,小斌,小星。

現(xiàn)在想想這個(gè)問題: 小方和泥鰍有什么區(qū)別? 這個(gè)問題一樣的奇怪,但比起魚和泥鰍的問題來還好點(diǎn)。你知道小方是一條泥鰍, 所以他并沒什么不同,他只是泥鰍的一個(gè)“實(shí)例(instance)”。小斌和小星一樣也是泥鰍的實(shí)例。我的意思是說,它們是由泥鰍創(chuàng)建出來的,而且代表著和泥鰍一樣 的屬性。 所以我們的思維方式是(你可能會(huì)有點(diǎn)不習(xí)慣):魚是一個(gè)“類(class)”,泥鰍是 一個(gè)“類(class)”,而小方是一個(gè)“對(duì)象(object)”。仔細(xì)想想,然后我再一點(diǎn)一點(diǎn)慢慢解釋給你。?

魚是一個(gè)“類”,表示它不是一個(gè)真正的東西,而是一個(gè)用來描述具有同類屬性的實(shí)例的概括性詞匯。 你有鰭?你有鰾?你住在水里?好吧那你就是一條魚。 后來河蟹養(yǎng)殖專家路過,看到你的水桶,于是告訴你:“小伙子,你這些魚是泥 鰍?!?專家一出,真相即現(xiàn)。并且專家還定義了一個(gè)新的叫做“泥鰍”的“類”,而 164 這個(gè)“類”又有它特定的屬性。細(xì)長(zhǎng)條?有胡須?愛鉆泥巴?吃起來味道還可以? 那你就是一條泥鰍。 最后家庭煮父過來了,他跟河蟹專家說:“非也非也,你看到的是泥鰍,我看到的是小方,而且我要把小方和剁椒配一起做一道小菜?!庇谑悄憔陀辛艘恢唤凶鲂》降哪圉q的“實(shí)例(instance)”(泥鰍也是魚的一個(gè)“實(shí)例”),并且你使用了它(把它塞到你的胃里了),這樣它就是一個(gè)“對(duì)象(object)”。?

這會(huì)你應(yīng)該了解了:小方是泥鰍的成員,而泥鰍又是魚的成員。這里的關(guān)系式:對(duì)象屬于某個(gè)類,而某個(gè)類又屬于另一個(gè)類。?

寫成代碼是什么樣子這個(gè)概念有點(diǎn)繞人,不過實(shí)話說,你只要在創(chuàng)建和使用 class 的時(shí)候操心一下 就可以了。我來給你兩個(gè)區(qū)分 Class 和 Object 的小技巧。 首先針對(duì)類和對(duì)象,你需要學(xué)會(huì)兩個(gè)說法,“is-a(是啥)”和“has-a(有啥)”。“是啥” 要用在談?wù)摗皟烧咭灶惖年P(guān)系互相關(guān)聯(lián)”的時(shí)候,而“有啥”要用在“兩者無共同點(diǎn), 僅是互為參照”的時(shí)候。?

接下來,通讀這段代碼,將每一個(gè)注解為 ##?? 的位置標(biāo)明他是“is-a”還是“has-a” 的關(guān)系,并講明白這個(gè)關(guān)系是什么。在

代碼的開始我還舉了幾個(gè)例子,所以你只要寫剩下的就可以了。 記住,“是啥”指的是魚和泥鰍的關(guān)系,而“有啥”指的是泥鰍和鰓的關(guān)系。 (譯注:為了解釋方便,譯文使用了中文魚名。原文使用的是“三文魚(salmon)” 和“大比目魚(halibut)”,名字也是英文常用人名。)


關(guān)于 class Name(object) 記得我曾經(jīng)強(qiáng)迫讓你使用 class Name(object) 卻沒告訴你為什么吧,現(xiàn)在你已經(jīng)知道了“類”和“對(duì)象”的區(qū)別,我就可以告訴你原因了。

如果我早告訴你的話, 你可能會(huì)暈掉,也學(xué)不會(huì)這門技術(shù)了。 真正的原因是在 Python 早期,它對(duì)于 class 的定義在很多方面都是嚴(yán)重有問題的。當(dāng)他們承認(rèn)這一點(diǎn)的時(shí)候已經(jīng)太遲了,所以逼不得已,他們需要支持這種有問題的 class。為了解決已有的問題,他們需要引入一種“新類”,這樣的話“舊類”還能繼續(xù)使用,而你也有一個(gè)新的正確的類可以使用了。

這就用到了“類即是對(duì)象”的概念。他們決定用小寫的“object”這個(gè)詞作為一個(gè)類, 讓你在創(chuàng)建新類時(shí)從它繼承下來。有點(diǎn)暈了吧?一個(gè)類從另一個(gè)類繼承,而后者雖然是個(gè)類,但名字卻叫“object”……不過在定義類的時(shí)候,別忘記要從 object 繼承就好了。

的確如此。一個(gè)詞的不同就讓這個(gè)概念變得更難理解,讓我不得不現(xiàn)在才講給你。 現(xiàn)在你可以試著去理解“一個(gè)是對(duì)象的類”這個(gè)概念了,如果你感興趣的話。 不過我還是建議你別去理解了,干脆完全忘記舊格式和新格式類的區(qū)別吧,就假設(shè) Python 的 class 永遠(yuǎn)都要求你加上 (object) 好了,你的腦力要留著思考更重要的問題。?

加分習(xí)題?

研究一下為什么 Python 添加了這個(gè)奇怪的叫做 object 的 class,它究竟有什么含義呢?

  1. 有沒有辦法把 Class 當(dāng)作 Object 使用呢?

  2. 在習(xí)題中為 animals、fish、還有 people 添加一些函數(shù),讓它們做一些事情??纯?當(dāng)函數(shù)在 Animal 這樣的“基類(base class)”里和在 Dog 里有什么區(qū)別。

  3. 找些別人的代碼,理清里邊的“是啥”和“有啥”的關(guān)系。

  4. 使用列表和字典創(chuàng)建一些新的一對(duì)應(yīng)多的“has-many”的關(guān)系。

  5. 你認(rèn)為會(huì)有一種“has-many”的關(guān)系嗎?閱讀一下關(guān)于“多重繼承(multiple inheritance)”的資料,然后盡量避免這種用法。



習(xí)題 45: 對(duì)象、類、以及從屬關(guān)系的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
孟津县| 维西| 保定市| 离岛区| 南靖县| 唐海县| 阳江市| 织金县| 彰化市| 江西省| 巧家县| 游戏| 延寿县| 潍坊市| 康乐县| 陵水| 芮城县| 嘉定区| 开封县| 巴中市| 华亭县| 玛曲县| 民乐县| 盐源县| 宝鸡市| 吐鲁番市| 湾仔区| 唐海县| 南汇区| 靖宇县| 吕梁市| 云林县| 宁陕县| 富宁县| 东源县| 梧州市| 望城县| 东山县| 杨浦区| 万荣县| 阳原县|