一、面向對象簡介
考慮現實生活中,我們的思維方式是放在學生這個個人上,是學生做了自我介紹。而不是像我們剛剛寫出的代碼,先有了介紹的行為,再去看介紹了誰。
用我們的現實思維方式該怎麼用程序表達呢?
- 面向過程:根據業務邏輯從上到下寫代碼。
-
面向對象:將數據與函數綁定到一起,進行封裝,這樣能夠更快速的開發程序,減少了重複代碼的重寫過程。
面向過程編程最易被初學者接受,其往往用一長段代碼來實現指定功能,開發過程的思路是將數據與函數按照執行的邏輯順序組織在一起,數據與函數分開考慮。
今天來學習一種新的編程方式:面向對象編程(Object Oriented Programming,OOP,面向對象程序設計)。
面向對象編程的2個非常重要的概念:類和對象。
對象是面向對象編程的核心,在使用對象的過程中,為了將具有共同特徵和行為的一組對象抽象定義,提出了另外一個新的概念——類。
類就相當於製造飛機時的圖紙,用它來進行創建的飛機就相當於對象。
二、分析類與對象
1. 類
物以類聚,人以群分。
具有相似內部狀態和運動規律的實體的集合(或統稱為抽象)。
具有相同屬性和行為事物的統稱。
類是抽象的,在使用的時候通常會找到這個類的一個具體的存在,使用這個具體的存在,一個類可以找到多個對象。
2. 對象
某一個具體事物的存在 ,在現實世界中可以是看得見摸得著的。可以是直接使用的。
3. 類和對象之間的關係
小總結:類就是創建對象的模板。
4. 區分類和對象
奔馳smart 類
張三的那輛奔馳smart 對象
水果 類
蘋果 類
紅蘋果 類 紅富士蘋果 類
我嘴裡吃了一半的蘋果 對象
5. 類的構成
類(Class) 由3個部分構成
- 類的名稱:類名
- 類的屬性:一組數據
- 類的方法:允許對對象進行操作的方法 (行為)
舉例:
1)人類設計,只關心3樣東西:
- 事物名稱(類名):人(Person)
- 屬性:身高(height)、年齡(age)
- 方法(行為/功能):跑(run)、打架(fight)
2)狗類的設計
- 類名:狗(Dog)
- 屬性:品種 、毛色、性別、名字、 腿兒的數量
- 方法(行為/功能):叫 、跑、咬人、吃、搖尾巴
6. 類的抽象
如何把日常生活中的事物抽象成程序中的類?
擁有相同(或者類似)屬性和行為的對象都可以抽像出一個類。
方法:一般名詞都是類(名詞提煉法)
<1> 坦克發射3顆炮彈轟掉了2架飛機
- 坦克 --> 可以抽象成類。
- 炮彈 --> 可以抽象成類。
- 飛機 --> 可以抽象成類。
<2> 小明在公車上牽著一條叼著熱狗的狗
- 小明 --> 人類。
- 公車 --> 交通工具類。
- 熱狗 --> 食物類。
- 狗 --> 狗類。
<3>【想一想】如下圖中,有哪些類呢?
說明:
- 人
- 槍
- 子彈
- 手榴彈
- 刀子
- 箱子
<4>【想一想】如下圖中,有哪些類呢?
說明:
- 向日葵
- 類名:xrk
- 屬性:顏色、品類
- 行為:放陽光
- 豌豆
- 類名:wd
- 屬性:顏色 、髮型、血量
- 行為:發炮、搖頭
- 堅果:
- 類名:jg
- 屬性:血量、類型
- 行為:阻擋
- 殭屍:
- 類名:js
- 屬性:顏色、血量、 類型、速度
- 行為:走、跑跳、吃、死
三、項目
1. 定義類
定義一個類,格式如下:
class 類名:
方法列表
demo:定義一個Cat類
# 定義類
class Cat:
# 方法
def eat(self):
print("貓在吃魚....")
def drink(self):
print("貓在喝可樂...")
說明:
- 定義類時有2種:新式類和經典類,上面的Cat為經典類,如果是Cat(object)則為新式類
- 類名的命名規則按照"大駝峰"。
2. 創建對象
Python中,可以根據已經定義的類去創建出一個個對象。
創建對象的格式為:
對象名 = 類名()
創建對象demo:
# 定義一個類
class Cat:
# 屬性
# 方法
def eat(self):
print("貓在吃魚....")
def drink(self):
print("貓在喝可樂...")
# 根據類,創建一個對象
tom = Cat()
3. 調用對象的方法
class Cat:
# 屬性
# 方法
def eat(self):
print("貓在吃魚....")
def drink(self):
print("貓在喝可樂...")
# 創建了一個對象
tom = Cat()
tom.eat() # 調用對象的eat方法
tom.drink()
運行結果,如圖所示:
4. 給對象添加屬性
class Cat:
# 屬性
# 方法
def eat(self):
print("貓在吃魚....")
def drink(self):
print("貓在喝可樂...")
# 創建了一個對象
tom = Cat()
# 給對象tom添加了一個屬性,叫name,裡面的值是"湯姆"
tom.name = "湯姆"
# 給對象tom添加了一個屬性,叫age,裡面的值是30
tom.age = 30
# 調用tom的方法
tom.eat()
tom.drink()
print(tom.name)
print(tom.age)
運行結果,如圖所示:
5. 通過方法獲取對象屬性。
class Cat:
# 屬性
# 方法
def eat(self):
print("貓在吃魚....")
def drink(self):
print("貓在喝可樂...")
def introduce(self):
# print("名字是:%s, 年齡是:%d" % (湯姆的名字, 湯姆的年齡))
print("名字是:%s, 年齡是:%d" % (tom.name, tom.age))
# 創建了一個對象
tom = Cat()
# 給對象tom添加了一個屬性,叫name,裡面的值是"湯姆"
tom.name = "湯姆"
tom.age = 30
# 調用tom的方法
tom.eat()
tom.drink()
# 直接通過對象獲取其屬性
print(tom.name)
print(tom.age)
print("-"*30)
# 調用tom的方法,在其方法中獲取它的屬性
tom.introduce()
運行結果,如圖所示:
四、總結
本文以生活中的基礎現象為切入點,主要介紹了Python的面向對象基礎知識,用豐富的案例幫助大家更好的去了解對象,最後以一隻貓作為小項目,使用Python編程語言,方便大家增加對類和對象的認識,希望對大家的學習有幫助。
想學習更多Python網絡爬蟲與數據挖掘知識,大家可前往專業網站:http://pdcfighting.com/