【Python入門自學筆記專輯】——面向對象編程

【Python入門自學筆記專輯】——面向對象編程

前言

​ 面相對象是Python的重要特性,繼承了C++的類風格,在Python中的一切數據類型都是面向對象的。本章主要介紹Python的面向對象編程。


面向對象:

​ 什麼是OOP(面向對象),Object Oriented Programming,原來就是面向對象的編程啊,還有OOD(面向對象的設計),OOA(面向對象的分析)。那什麼是面向對象呢?要想了解這個問題我們要先了解面向過程,這樣對比我們就好理解了。

很早很早以前的編程是面向過程的,比如實現一個算術運算1+1 = 2,通過這個簡單的算法就可以解決問題。但是隨着時代的進步,人們不滿足現有的算法了,因爲問題越來越複雜,不是1+1那麼單純了,比如一個班級的學生的數據分析,這樣就有了對象這個概念,一切事物皆對象。將現實的事物抽象出來,注意抽象這個詞是重點啊,把現實生活的事物以及關係,抽象成類,通過繼承,實現,組合的方式把萬事萬物都給容納了。實現了對現實世界的抽象和數學建模。這是一次飛躍性的進步。


舉個最簡單點的例子來區分 面向過程和麪向對象:

有一天你想吃魚香肉絲了,怎麼辦呢?你有兩個選擇

1、自己買材料,肉,魚香肉絲調料,蒜薹,胡蘿蔔等等然後切菜切肉,開炒,盛到盤子裏。

2、去飯店,張開嘴:老闆!來一份魚香肉絲!

看出來區別了嗎?這就是1是面向過程,2是面向對象。

面向對象有什麼優勢呢?首先你不需要知道魚香肉絲是怎麼做的,降低了耦合性。如果你突然不想吃魚香肉絲了,想吃洛陽白菜,對於1你可能不太容易了,還需要重新買菜,買調料什麼的。對於2,太容易了,大喊:老闆!那個魚香肉絲換成洛陽白菜吧,提高了可維護性。總的來說就是降低耦合,提高維護性!

面向過程是具體化的,流程化的,解決一個問題,你需要一步一步的分析,一步一步的實現。

面向對象是模型化的,你只需抽象出一個類,這是一個封閉的盒子,在這裏你擁有數據也擁有解決問題的方法。需要什麼功能直接使用就可以了,不必去一步一步的實現,至於這個功能是如何實現的,管我們什麼事?我們會用就可以了。

面向對象的底層其實還是面向過程,把面向過程抽象成類,然後封裝,方便我們我們使用的就是面向對象了。

面向過程:

優點:性能比面向對象好,因爲類調用時需要實例化,開銷比較大,比較消耗資源。
缺點:不易維護、不易複用、不易擴展.

優點:易維護、易複用、易擴展,由於面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統 更加靈活、更加易於維護 .
缺點:性能比面向過程差

面向對象的三大特性:

1、封裝
隱藏對象的屬性和實現細節,僅對外提供公共訪問方式,將變化隔離,便於使用,提高複用性和安全性。
2、繼承
提高代碼複用性;繼承是多態的前提。
3、多態
父類或接口定義的引用變量可以指向子類或具體實現類的實例對象。提高了程序的拓展性。

參考:https://blog.csdn.net/jerry11112/article/details/79027834
https://www.jianshu.com/p/7a5b0043b035


​ 下面回到正題,有興趣的朋友可以自己查查面向對象和麪向過程,這回寫筆記簡單些,準確的說是字少,不能囉裏囉嗦,打字費勁了🙂,筆記都可以不說人話,*o( ̄︶ ̄*)o

類和對象

定義類

語法格式如下:

class 類名[ (父類) ]:
	類體

​ 其中,class是聲明類的關鍵字,“類名”是自定義的類名,自定義類名首先應該是合法的標識符,這個專輯博客以前有過詳細解釋的命名規範,“父類”聲明當前類繼承的父類,父類可以省略聲明,表示直接繼承object類。

定義動物(Animal)類代碼如下:

class Animal(object):
    #類體
    pass

​ 上述代碼聲明瞭動物類,它繼承了object類,object是所有類的根類,在Python中任何一個動物類都直接或間接繼承object,所以(object)部分代碼可以省略。


**提示:**代碼的pass語句什麼語句操作都不執行,用來維持程序結構的完整。有些不想編寫的代碼,又不想有語法錯誤,可以使用pass語句佔位。


創建和使用對象

​ “對象”也稱爲“實例”。一個對象的生命週期包括三個階段:創建使用銷燬。銷燬對象時Python的垃圾回收機制釋放不再使用的內存(由於我也是初學,所以講不清楚,也許是delete的del),不需要程序員負責。程序員只關心創建和使用對象,這一節介紹創建對象。

實例代碼:

animal = Animal();

​ Animal是上一節定義的動物類,Animal()表達式創建了一個動物對象,並把創建的對象賦值給animal變量,animal是指向動物對象的一個引用。通過animal變量可以使用剛剛創建的動物對象。如下代碼打印輸出動物對象。

print(animal)

​ 輸出結果如下:

<__main__.Animal object at 0x0000021BA5CCA908>

​ 屏幕會出現一堆晦澀難懂的信息。事實上,print函數調用了對象的__str__()方法,__str__()方法是object類的一個方法,我也不知道,先不用管。


提示:這種上下劃線開始和結尾的方法是Python保留的,有着特殊的含義,稱爲魔法方法


構造方法

​ 構造方法就是__init()__方法,該方法用來創建和初始化實例變量,這種方法就是“構造方法”。__init()__方法也是一種魔法方法。定義它的第一個參數應該是self,其後的參數纔是用來初始化實例變量的。調用構造方法時不用傳入self

構造方法實例如下:

#-*- coding = utf-8 -*-

class Animal(object):
    """定義動物類"""

    def __init__(self, age, sex = 1, weight = 0.0):
        self.age = age          # 定義年齡實例變量
        self.sex = sex          # 定義性別實例變量
        self.weight = weight    # 定義體重實例變量


a1 = Animal(2, 0, 10.0)
a2 = Animal(1, weight = 5.0)
a3 = Animal(1, sex = 0)

print('a1年齡:{0}'.format(a1.age))
print('a2體重:{0}'.format(a2.weight))
print('a3性別:{0}'.format('雌性' if a3.sex == 0 else '雄性'))

輸出結果:

a1年齡:2
a2體重:5.0
a3性別:雌性

print(‘a2體重:{0}’.format(a2.weight))
print(‘a3性別:{0}’.format(‘雌性’ if a3.sex == 0 else ‘雄性’))


輸出結果:

a1年齡:2
a2體重:5.0
a3性別:雌性


​	上述代碼第六行是定義構造方法,其中參數除了第一個*self*外,其他的參數可以有默認值,這也提供了默認值的構造方法,能夠給調用者提供多個不同形式的構造方法。代碼第12到第14行是調用狗仔方法創建Animal對象,其中不需要傳入*self*,只需要後面三個實際參數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章