?
Part1
如何面向“對(duì)象”
網(wǎng)上關(guān)于Java和**C++**的面向?qū)ο缶幊滔嚓P(guān)介紹的博客文章已經(jīng)很多了,那我為什么還寫呢?因?yàn)?,人生苦短,剛好我是學(xué)Python的...
今天,我們就來走進(jìn)面向?qū)ο缶幊痰睦硐雵?/strong>——深入理解一下Python中的面向?qū)ο缶幊蹋?strong>Object-Oriented Programming,OOP)。
“日子一天一天過 我們會(huì)慢慢長大,我不管你懂不懂我在寫什么...時(shí)光匆匆匆匆流走,也也也不回頭...”
?
Part2
程序設(shè)計(jì)之面向?qū)ο缶幊?/h2>
?文章來源地址http://www.zghlxwxcb.cn/news/detail-471884.html
1 為什么需要程序設(shè)計(jì)?
在建筑行業(yè),建筑師一般不會(huì)想要為一幢100層的大樓添加一個(gè)地下室,因?yàn)檫@樣做無疑是成本過高,甚至有可能會(huì)失敗。令人吃驚的是,在我們的軟件開發(fā)行業(yè)中,當(dāng)用戶提出類似的改動(dòng)時(shí),都不會(huì)去多想。相反,老板或者產(chǎn)品經(jīng)理可能會(huì)說這是一個(gè)簡單的編程問題。(哈哈,這里無意中傷程序員與產(chǎn)品經(jīng)理...)
但是,軟件本質(zhì)上是復(fù)雜的,隨著項(xiàng)目的迭代,復(fù)雜性往往超出了人類智能的范圍。
?文章來源:http://www.zghlxwxcb.cn/news/detail-471884.html
2 是否存在“最好的”設(shè)計(jì)?
在每一種工程實(shí)踐中,設(shè)計(jì)都是一種訓(xùn)練有素的方法。不管是函數(shù)式編程、泛型編程、并發(fā)編程、面向過程、基于對(duì)象、面向?qū)ο?/strong>等的程序設(shè)計(jì),我們通過設(shè)計(jì)方法來創(chuàng)造某個(gè)問題的解決方案,從而提供時(shí)間需求的途徑。
那么,是否存在“最好的”設(shè)計(jì)方法?
這個(gè)問題可能沒有絕對(duì)的答案,但《沒有“銀彈”》告訴我們:沒有單純的技術(shù)或管理上的進(jìn)步可以萬無一失地讓軟件工程從需求得到一個(gè)復(fù)雜系統(tǒng)的實(shí)現(xiàn)。所以,面向?qū)ο笠膊皇墙鉀Q軟件開發(fā)中所有問題的最后的“銀彈”,如今很多高級(jí)編程語言提供了多種編程設(shè)計(jì)范式,Python也不例外。
?
3 為什么面向?qū)ο缶幊蹋?/h3>
類是面向?qū)ο蟪绦蚓幊痰闹饕ぞ撸覀冇盟鼇矶x新種類的方式,它在程序領(lǐng)域中反映了現(xiàn)實(shí)中的對(duì)象。而什么是面向?qū)ο缶幊棠兀?/p>
面向?qū)ο缶幊淌且环N實(shí)現(xiàn)的方法,在這種方法中,程序被組織成許多組相互協(xié)作的對(duì)象,每個(gè)對(duì)象代表某個(gè)類的一個(gè)實(shí)例,而類則屬于一個(gè)通過繼承關(guān)系形成的層次結(jié)構(gòu)。
來看一下概念中的三個(gè)要點(diǎn):
-
利用對(duì)象作為程序的基本單元,而不是算法
-
每一個(gè)對(duì)象都是某個(gè)類的一個(gè)實(shí)例
-
類和類之間可以通過繼承關(guān)系聯(lián)系在一起
滿足這三點(diǎn)才是叫面向?qū)ο蟮某绦颉N覀冇靡粋€(gè)簡單的例子來模擬一下
接著,我們先了解一下面向?qū)ο蟮娜齻€(gè)核心概念:
1. ?繼承
通俗理解,“兒子從父親那繼承下來的東西”。如果在一個(gè)類的基礎(chǔ)上創(chuàng)建新的有類,會(huì)將父類的屬性和方法直接繼承下來,從而減少重復(fù)代碼的編寫。提供繼承信息(財(cái)產(chǎn))的我們稱為父類、或者基類、超類;得到繼承信息的我們稱為子類、或派生類或衍生類。
2. ?多態(tài)
字面意思,“多種形態(tài)”,接口的不同實(shí)現(xiàn)方式即為多態(tài)。通過多態(tài),子類可以擴(kuò)展父類的能力,或者覆寫父類的操作。
3. ?封裝
我對(duì)封裝的理解,就像一個(gè)具有某些功能的黑箱子,隱藏一切可以隱藏的實(shí)現(xiàn)細(xì)節(jié),然后對(duì)外提供簡單的編程接口。
面向?qū)ο缶幊烫峁┝艘环N有效的編程方式,利用這種方式,我們將代碼冗余程度降到最低。因此,我們可以通過定制已有的代碼來編寫新的程序而不是在原處進(jìn)行修改。
?
Part3
Python中的一切皆對(duì)象
在Python中,OOP是完全不是必須的,在初學(xué)階段也不需要使用類,利用函數(shù)結(jié)構(gòu)也能寫出很多好用的腳本,完成很多有趣的編程。但是Python OOP也非常有意思,不信你跟我一起學(xué)學(xué)。
Java雖然也是面向?qū)ο缶幊痰恼Z言,但是血統(tǒng)沒有Python純正。比如Java的八種基本數(shù)據(jù)類型之一int,在持久化的時(shí)候,就需要包裝成Integer類對(duì)象。
與Java相比,Python的面向?qū)ο蟾鼜氐?。學(xué)過Python的朋友可能知道,在Python中,把我們所有能看到的都變成對(duì)象——數(shù)字、字符串、元組、列表、字典、函數(shù)、方法、類、模塊、包括你的代碼。
怎么理解這個(gè)過程呢?Python 中的一切都可以賦值給變量或者作為參數(shù)傳遞給函數(shù),我們來看一下代碼:
a?=?3
b?=?a
print(a)??#?打印:3
print(b)??#?打?。?
def?all_is_object():
????print("Learing?Python?OOP")
????
all_is_well?=?all_is_object
all_is_object()?#?打印:Learing Python OOP
all_is_well()??#?打?。篖earing Python OOP
class?Person():
????def?__init__(self,?name):
????????print("姓名:",?name)
????????
A?=?Person
xiaoyu?=?A("小宇")??#?姓名:?小宇
?
Part4
Python對(duì)象的三個(gè)特性
Python 的所有對(duì)象都有三個(gè)特性:身份(id)、類型(type)、值(value)
-
身份(id):每個(gè)對(duì)象都有一個(gè)唯一的身份標(biāo)識(shí)自己,任何對(duì)象的身份都可以使用內(nèi)建函數(shù) id() 來得到,可以簡單的認(rèn)為這個(gè)值是該對(duì)象的內(nèi)存地址。
a?=?3
b?=?a
id(a)
id(b)
id(test_list)
-
類型(type):對(duì)象的類型決定了對(duì)象可以保存什么類型的值,有哪些屬性和方法,可以進(jìn)行哪些操作,遵循怎樣的規(guī)則。可以使用內(nèi)建函數(shù) type() 來查看對(duì)象的類型。
a?=?3
b?=?a
print(type(a))??#?<class?'int'>
print(type(int))??#?<class?'type'>
test_list?=?[1,?2,?3,?4,?5]
print(type(test_list))??#?<class?'list'>
print(type(list))??#?<class?'type'>
test_tuple?=?(1,?2,?3,?4,?5)
print(type(test_tuple))????#?<class?'tuple'>
print(type(tuple))????#?<class?'type'>
test_str?=?"I?love?python"
print(type(test_str))??#?<class?'str'>
print(type(str))??#?<class?'type'>
-
值(value):對(duì)象所表示的數(shù)據(jù)
print(a)??#?3
print(test_list)??#?[1,?2,?3,?4,?5]
print(test_str)????#?I?love?python
"身份"、"類型"和"值"在所有對(duì)象創(chuàng)建時(shí)被賦值。只要對(duì)象存在,這三個(gè)特性就一直存在。
?
Part5
總結(jié)
事實(shí)上,我們學(xué)習(xí)的軟件框架(framework)就是父類的集合,框架就是把常見的程序設(shè)計(jì)任務(wù)實(shí)現(xiàn)成類,我們所需要做的就是通過編寫自己的子類,組合和定制已調(diào)試過的代碼。此外,將常見的OOP結(jié)構(gòu)歸類,就是我們的設(shè)計(jì)模式(design pattern),來協(xié)助解決設(shè)計(jì)中的問題。
這些軟件框架可能提供一些數(shù)據(jù)庫接口、測(cè)試協(xié)議、GUI工具包等
?
歡迎點(diǎn)贊收藏轉(zhuǎn)發(fā)????
?
?
到了這里,關(guān)于深入理解一下Python中的面向?qū)ο缶幊痰奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!