Python之面向過程和面向對象的區別
一、面向過程
1、面向過程:核心是過程二字,過程指的是解決問題的步驟,好比如設計一條流水線,是一種機械式的思維方式。
就是程序從上到下一步步執行,一步步從上到下,從頭到尾的解決問題 。基本設計思路就是程序一開始是要著手解決一個大的問題,然後把一個大問題分解成很多個小問題或子過程,這些子過程再執行的過程再繼續分解直到小問題足夠簡單到可以在一個小步驟範圍內解決。
2、優缺點:
優點:將復雜的問題流程化,進而簡單化。
缺點:擴展性差
3、實例:面向過程式的登錄註冊程序
import json,re
def login():
‘‘‘
用戶輸入
:return:
‘‘‘
usename = input(‘用戶名:‘).strip()
pwd = input(‘密碼:‘).strip()
tel = input(‘電話:‘).strip()
mail = input(‘郵箱:‘).strip()
return {
‘usename‘:usename,
‘pwd‘:pwd,
‘tel‘:tel,
‘mail‘:mail
}
def authentication(use_info):
‘‘‘
判斷用戶名和密碼等信息是否合法
:return:
‘‘‘
is_valid = True # 默認合法
if len(use_info[‘usename‘])==0:
print(‘用戶名不能為空!‘)
is_valid = False
if len(use_info[‘pwd‘])< 6:
print(‘密碼長度不得小於6位!‘)
is_valid = False
if len(re.findall(‘1[0-9]{10}‘,use_info[‘tel‘]))==0:
print(‘電話格式不對!‘)
is_valid = False
if not re.search(r‘@.*?.com$‘,use_info[‘mail‘]).group(): # 使用Python的r前綴,就不用考慮轉義的問題,‘*‘加個?就可以讓‘.‘采用非貪婪匹配
print(‘郵箱格式不對‘)
is_valid = False
return {
‘valid‘:is_valid,
‘info‘:use_info
}
def register(auth):
‘‘‘
若輸入信息合法則註冊,寫入文件或數據庫
:param auth:
:return:
‘‘‘
if auth[‘valid‘]==True:
with open(‘data.json‘,‘w‘,encoding=‘utf-8‘) as f:
json.dump(auth[‘info‘],f)
def main():
‘‘‘
主邏輯程序
:return:
‘‘‘
use_info = login()
auth = authentication(use_info)
register(auth)
if __name__==‘__main__‘: # 直接調用時執行下列程序,被調用時不執行
main()
View Code
註意:一般認為, 如果你只是寫一些簡單的腳本,去做一些一次性任務,用面向過程的方式是極好的,但如果你要處理的任務是復雜的,且需要不斷叠代和維護 的, 那還是用面向對象最方便。
二、面向對象
1、面向對象:核心是對象二字,特征和技能的結合體。
2、優缺點:
優點:可擴展性高
缺點:編程復雜度高
3、應用場景:用戶需求經常變化,互聯網應用,遊戲,企業內應用等。
4、關於面向對象的幾個名詞解釋
類:一個類即是對一系列對象相似的特征和技能的結合體,如同一個模板。在類中定義了這些對象的都具備的屬性,共同的方法。
屬性:人類包含很多特征,把這些特征用程序來描述的話,叫做屬性,比如年齡、身高、性別、姓名等都叫做屬性,一個類中,可以有多個屬性。
方法:人類不止有身高、年齡、性別這些屬性,還能做好多事情,比如說話、走路、吃飯等,相比較於屬性是名詞,說話、走路是動詞,這些動詞用程序來描述就叫做方法。
實例(對象):一個對象即是一個類的實例化後的實例,一個類必須經過實例化後方可在程序中調用,一個類可以實例化多個對象,每個對象亦可以有不同的屬性,就像人類是指所有人,每個人是指具體的對象,人與人之前有共性,亦有不同。
實例化:把一個類轉變為一個對象的過程就叫實例化。
5、簡單實例
# 現實世界中的對象:
‘‘‘
對象1
特征
職業:學生
姓名:王二
性別:男
年齡:22
技能
學習
打遊戲
對象2
特征
職業:學生
姓名:張三
性別:男
年齡:20
技能
學習
打遊戲
看書
對象3
特征
職業:學生
姓名:婉婉
性別:女
年齡:18
技能
學習
打遊戲
看書
現實中的類:
特征:
職業:學生
技能:
學習
打遊戲
看書
在程序中:
‘‘‘
# 先有類
class School_learn:
job = ‘student‘
def study(self):
print(‘study hard!‘)
def play_game(self):
print(‘play games as little as you can‘)
def read(self):
print(‘read books more and more‘)
# 再調用類產生對象
student1 = School_learn()
student2 = School_learn()
student3 = School_learn()
print(student1) # <__main__.School_learn object at 0x000002B70F8D7588> 對象
print(student2)
print(student3)
6、面向對象三大特性
<1>封裝(Encapsulation):在類中對數據的賦值、內部調用對外部用戶來說是透明不可見的,這使類變成了一個膠囊或容器,裏面包含著類的數據和方法。
<2>繼承(Inheritance):一個類可以派生出子類,在這個父類裏定義的屬性、方法自動被子類繼承。
<3>多態(Polymorphism):多態是面向對象的重要特性,簡單點說:“一個接口,多種實現”,指一個基類中派生出了不同的子類,且每個子類在繼承了同樣的方法名的同時又對父類的方法做了不同的實現,這就是同一種事物表現出的多種形態。
註意:這裏只是簡單說明下幾大特性,後續我們會深入探討的的。
Python之面向過程和面向對象的區別