天天看點

初識面向對象 | 手把手教你入門Python之五十一

上一篇: 包的使用 | 手把手教你入門Python之五十 下一篇: self的使用 | 手把手教你入門Python之五十二 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《Python入門2020最新大課》 ,主講人姜偉。

面向對象的

面向對象與面向過程

  • 面向過程:根據業務邏輯從上到下寫代碼。
  • 面向對象:将變量與函數綁定到一起,分類進行封裝,每個程式隻要負責配置設定給自己的分類,這樣能夠更快速的開發程式,減少了重複代碼。

面向過程程式設計易被初學者接受,其往往用一長段代碼來實作指定功能,開發過程的思路是将資料與函數按照執行的邏輯順序組織在一起,資料與函數分開考慮,面向過程基本是由函數組成的。

面向過程程式設計

面向過程程式設計的關注點在于怎麼做

  • 把完成某一個需求的 所有步驟 從頭到尾 逐漸實作
  • 根據開發需求,将某些 功能獨立 的代碼 封裝 成一個又一個 函數
  • 最後完成的代碼,就是順序地調用 不同的函數

特點:

  • 注重步驟與過程,不注重職責分工
  • 如果需求複雜,代碼會變得很複雜
  • 開發複雜項目,沒有固定的套路,開發難度很大!
初識面向對象 | 手把手教你入門Python之五十一

面向對象基本概念

面向對象程式設計(Object Oriented Programming,OOP,面向對象程式設計)和面向過程程式設計,是兩種不同的程式設計方式。

面向對象程式設計的關注點在于誰來做

相比較函數,面向對象是更大的封裝,根據職責在 一個對象中封裝多個方法
  • 在完成某一個需求前,⾸首先确定職責 — 要做的事情(方法)
  • 根據 職責 确定不同的 對象,在對象内部封裝不同的方法(多個)
  • 最後完成的代碼,就是順序地調用不同對象的相應⽅方法。
  • 注重 對象和職責,不同的對象承擔不同的職責。
  • 更加适合應對複雜的需求變化,是專門應對複雜項目開發,提供的固定套路。
  • 需要在面向過程基礎上,再學習一些面向對象的文法。

類和對象

類和對象是面向對象程式設計的兩個核心概念。

類是對一群具有相同特征或者行為 的事物的一個統稱,是抽象的。

  • 特征其實就是一個變量,在類里我們稱之為屬性。
  • 行為其實就是一個函數,在類里我們稱之為方法。
  • 類其實就是由 屬性 和 方法 組成的一個抽象概念。

類就相當于制造飛機時的圖紙,是一個模闆。這個模闆隻規定了飛機的某些特征(例如大小,顔色,型号等

等)和行為(例如起飛,降落,飛行等等),它并不是一個具體的飛機,而是對飛機的一個抽象概念。它出現的目的,是為了讓我們的建立飛機對象。

初識面向對象 | 手把手教你入門Python之五十一

對象

對象是由類建立出來的一個具體存在,可以直接使用。由哪一個類建立出來的 對象,就擁有在哪一個類中定義的屬性和⽅方法。 對象 就相當于用圖紙制造的飛機。在開發中,應該先有類,在類里定義好屬性和行為,再根據類來建立對象。

初識面向對象 | 手把手教你入門Python之五十一

類和對象的關系

  • 類是模闆,對象是根據類這個模闆建立出來的,應該先有類,再有對象。
  • 使用同一個類,能夠建立出很多對象。
  • 類中定義了什麼屬性和方法,對象中就有什麼屬性和方法。
  • 不同對象對應的屬性值也會不同。

例如:定義了一個狗類,這個狗類有以下屬性:

  • 品種
  • 顔色
  • 性别
  • 名字

現在根據這個類建立出了兩條狗,這兩條狗分别是 哈士奇、灰色、母、二哈 和中華田園犬、黃色、公、旺财。我們發現,這兩條狗都具有 品種、顔色、性别和名字這些屬性,但是每條狗對應的屬性值卻不一樣。

類的設計

在使用面向對象開發前,應該首先分析需求,确定一下,程式中需要包含哪些類!

初識面向對象 | 手把手教你入門Python之五十一
初識面向對象 | 手把手教你入門Python之五十一

在程式開發中,要設計一個類,通常需要滿足一下三個要素:

  1. 類名 這類事物的名字,按照大駝峰命名法(每個單詞的首字母大寫)起名。
  2. 屬性 這類事物具有什麼樣的特征。
  3. 方法 這類事物具有什麼樣的行為。

定義類名

名詞提煉法:分析整個業務流程,出現的名詞,通常就是找到的類。

屬性和方法的确定

  • 對對象的特征描述,可以定義成屬性
  • 對象具有的行為(動詞)可以定義成方法

練習

需求1:

  • 小明今年18 歲,身高 1.75,每天早上跑完步,會去 吃東西
  • 小美今年17 歲,身高 1.65,小美不不跑步,小美喜歡 吃東西

需求2:

  • 一隻黃顔色的狗狗叫大黃
  • 看見生人汪汪叫
  • 看見家人搖尾巴

針對于上面的練習,我們需要抽象了解成一個類。接着來介紹面向對象的基本文法。

面向對象基本文法

在Python中,對象幾乎是無處不在的,我們可以使用

dir

内置函數來檢視這個對象里的方法。

定義簡單的類(隻包含方法)

面向對象是更大的封裝,在一個類中封裝多個方法,這樣通過這個類建立出來的對象,就可以直接調用這些方法了!

定義類

在Python中要定義一個隻包含方法的類,文法格式如下:

class 類名:
    def 方法1(self,參數列表):
        pass
    def 方法2(self,參數列表):
        pass           
1、方法的定義格式和之前學習過的函數一樣

2、方法里的第一個參數必須是self,大家暫時先記住,稍後介紹 self。

3、類名要遵守大駝峰命名法,每一個單詞的首字母都要大寫。類名定義的2種方法:

class <類名>:

class <類名>(object):

建立實例對象

當一個類定義完成之後,要使用這個類來建立對象,文法格式如下:

對象變量名 = 類名()           

面向對象代碼

以上面的練習需求1為例:

class Student(object):        #關注這個類有哪些特征和行為
    #在 __init__ 方法裡,以參數的形式定義特征,我們稱之為屬性
    def __init__(self, name, age, height):           
        self.name = name
        self.age = age
        self.height = height

    #行為定義為一個個函數
    def run(self):
        print('正在跑步')

    def eat(self):
        print('正在吃東西')


# 使用 Student 類建立了兩個執行個體對象 s1 s2
# s1和s2都有name,age,height屬性,同時都有run和eat方法
s1 = Student('小明', 18, 1.75)  # Student()  ==> 會自動調用 __init__ 方法
s2 = Student('小美', 17, 1.65)

# 根據業務邏輯,讓不同的對象執行不同的行為
s1.run()
s1.eat()

s2.eat()           

執行結果:

初識面向對象 | 手把手教你入門Python之五十一

需求

  • 小貓愛吃魚,小貓要喝水

分析

  • 定義一個貓類 Cat
  • 定義兩個方法 eat 和 drink
  • 按照需求 —— 不需要定義屬性
class Cat:
    """這是個貓類"""

    def eat(self):
        print("小貓在吃東西")

    def drink(self):
        print("小貓在喝水")

tom = Cat() # 建立了一個Cat對象
tom.eat()
tom.drink()

hello_kitty = Cat() # 又建立了一個新的Cat對象
hello_kitty.eat()
hello_kitty.drink()           
初識面向對象 | 手把手教你入門Python之五十一

配套視訊