在我們成長的過程中,不可避免的兩個(gè)過程:認(rèn)識(shí)世界和交朋友。
首先說說認(rèn)識(shí)世界的過程,在我們很小的時(shí)候,在認(rèn)識(shí)新事物的時(shí)候只能從自己周圍的事物一個(gè)一個(gè)開始認(rèn)識(shí),比如,“爸爸”,“媽媽” 。再之后長大一些開始上學(xué)以后,慢慢開始形成自己的認(rèn)識(shí)思維,有了自己做事情的步驟。接著進(jìn)入了社會(huì),很多事情開始變的極度復(fù)雜,這個(gè)時(shí)候自己已經(jīng)形成了一套屬于自己的思維方式,開始去思考這些問題,然后去解決。交朋友的過程也是這樣,從一開始的沒有朋友,到有了朋友,朋友越來越多,再到知道了什么是好朋友,什么是普通朋友這樣的分類。
代碼也是這樣,我們從一開始學(xué)習(xí)的基礎(chǔ)語法,堆疊功能慢慢地轉(zhuǎn)入到了函數(shù)式編程【面向過程編程】,在我們慢慢成長中又轉(zhuǎn)變到了面向?qū)ο缶幊?,學(xué)習(xí)的東西也開始由簡單慢慢地轉(zhuǎn)入了復(fù)雜,但是這也意味著我們能夠運(yùn)用這些東西去解決更為高級(jí)更為復(fù)雜的問題了。
說到這里,便可以請(qǐng)出我們今天的主角——面向?qū)ο缶幊塘?。它是一種更為常用更為高端復(fù)雜的編程思想,但是也不是說我們之前學(xué)習(xí)的函數(shù)式編程就沒用了,其實(shí)他們兩個(gè)各有利弊,在中小型的項(xiàng)目開發(fā)中,大家還是更傾向于用函數(shù)式編程,它可以將所有要處理的事情,開始封裝成具備一定處理功能的函數(shù),調(diào)用執(zhí)行;而且它作為面向過程編程,更有利于小型項(xiàng)目的開發(fā),讓這些項(xiàng)目的運(yùn)行以及美觀程度到達(dá)自身的最佳狀態(tài)。但是在中大型項(xiàng)目開發(fā)中這樣的開發(fā)操作~代碼中封裝了大量的包含處理步驟的函數(shù)開發(fā),代碼的邏輯處理方式不夠成熟,導(dǎo)致代碼高耦合。而面向?qū)ο笫菍?duì)面向過程編程的補(bǔ)充和完善,通過對(duì)象和對(duì)象之間的交互協(xié)作完成項(xiàng)目功能的開發(fā),降低代碼的耦合度,從而能夠使代碼的靈活性更高,代碼分工更加明確開發(fā)效率更高,甚至于代碼看上去更加的優(yōu)雅,畢竟優(yōu)雅就是python的特點(diǎn)之一。所以在很多的企業(yè)級(jí)開發(fā)中都傾向于面向?qū)ο缶幊趟枷脒M(jìn)行開發(fā)。
在面向?qū)ο笾?,我們首先?yīng)該聲明定義類型:->創(chuàng)建對(duì)象->對(duì)象有自身的特征、屬性(名詞|變量)->對(duì)象自身的行為(動(dòng)詞|方法(特殊的函數(shù)))。
但是這個(gè)時(shí)候就會(huì)有人問了,到底什么是類型什么是對(duì)象呢?類型,它是一個(gè)名稱、一個(gè)概念、一個(gè)稱呼,就比如我們生活中常說的車,衣服,鞋子之類的事物,它是大量有相似特征的事物抽象出來的一個(gè)統(tǒng)稱;而對(duì)象,它就是一種客觀存在的具體的事物,就比如車可以分為轎車,越野車,卡車等等,它們每一個(gè)都是一個(gè)對(duì)象,因?yàn)樗鼈兌际仟?dú)立客觀存在具體因?yàn)樗鼈兌际仟?dú)立客觀存在擁有具體特征行為的事物。
類型:
首先應(yīng)該通過一個(gè)class關(guān)鍵字定義一個(gè)數(shù)據(jù)類型(又稱類型,簡稱類),
基本語法為:class 類型名稱:
類型中的代碼
類型名稱命名規(guī)范:見名知意、駝峰命名法[一個(gè)或者多個(gè)英文單詞組成、每個(gè)單詞首字母大寫]
而且需要通過項(xiàng)目中需要的大量有相似特征和行為的對(duì)象,抽象出來的一個(gè)數(shù)據(jù)類型
對(duì)象:
對(duì)象:有具體特征和行為操作的事物
代碼:有具體(特征)屬性和(行為)方法的對(duì)象-> 事物
類型 VS 對(duì)象 區(qū)別?
類型:通過對(duì)象抽象出來的一個(gè)數(shù)據(jù)類型
類型中需要定義對(duì)象需要的特征[屬性|變量]和行為[方法]
class Person:
# 定義屬性、特征
# 固定寫法:在__init__方法中,定義類型的屬性
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
# 定義方法、行為
def eat(self, food):
print("吃飯了")
注意1:class 關(guān)鍵字,用來聲明定義一個(gè)類型,固定寫法
注意2:類型中的所有函數(shù),第一個(gè)參數(shù)self表示當(dāng)前對(duì)象,類似生活中的一個(gè)名詞:我
注意3:類型中的函數(shù),必須稱為方法;
函數(shù) VS 方法 : 兩個(gè)東西
方法是一種特殊的函數(shù),只能在類型中使用!
注意4:類型中方法,第一個(gè)參數(shù):指代的是當(dāng)前對(duì)象~~~一般被聲明為self
表示當(dāng)前對(duì)象,調(diào)用的時(shí)候不需要傳遞數(shù)據(jù)給self!
對(duì)象:某中類型一個(gè)具體存在的事物
代碼中的對(duì)象,需要通過類型來創(chuàng)建
如:tom = Person('湯姆', 18, '男')
通過 類型名稱() 的方式創(chuàng)建對(duì)象
創(chuàng)建對(duì)象時(shí),自動(dòng)調(diào)用執(zhí)行__init__()方法,將對(duì)象需要的數(shù)據(jù)傳遞過去
有了對(duì)象,就可以執(zhí)行對(duì)象的行為:調(diào)用對(duì)象的方法
通過 對(duì)象的變量.方法()直接調(diào)用
tom.eat("魚香肉絲")