Python之物件導向和麵向過程

Candy_GL發表於2018-12-24

轉自:https://www.cnblogs.com/schut/p/8541547.html

一、程式導向

  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()

 


 

 

  注意:一般認為, 如果你只是寫一些簡單的指令碼,去做一些一次性任務,用程式導向的方式是極好的,但如果你要處理的任務是複雜的,且需要不斷迭代和維護 的, 那還是用物件導向最方便。

 

二、物件導向

  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):多型是物件導向的重要特性,簡單點說:“一個介面,多種實現”,指一個基類中派生出了不同的子類,且每個子類在繼承了同樣的方法名的同時又對父類的方法做了不同的實現,這就是同一種事物表現出的多種形態。

注意:這裡只是簡單說明下幾大特性,後續我們會深入探討的的。

  

  
 
 

讀書原為修身,正己才能正人正世;不修身不正己而去正人正世者,無一不是盜名欺世;你把念過的書能用上十之一二,就是很了不得的人了。——朱先生

相關文章