複習python第七天

  • 2019 年 10 月 8 日
  • 筆記

面向對象:

面向對象編程——Object Oriented Programming,簡稱OOP,是一種程式設計思想。OOP把對象作為程式的基本單元,一個對象包含了數據和操作數據的函數。

面向過程的程式設計把電腦程式視為一系列的命令集合,即一組函數的順序執行。為了簡化程式設計,面向過程把函數繼續切分為子函數,即把大塊函數通過切割成小塊函數來降低系統的複雜度。

而面向對象的程式設計把電腦程式視為一組對象的集合,而每個對象都可以接收其他對象發過來的消息,並處理這些消息,電腦程式的執行就是一系列消息在各個對象之間傳遞。

在Python中,所有數據類型都可以視為對象,當然也可以自定義對象。自定義的對象數據類型就是面向對象中的類(Class)的概念。

面向對象的一些常識:

類(Class):

面向對象最重要的概念就是類(Class)和實例(Instance),必須牢記類是抽象的模板,比如Student類,而實例是根據類創建出來的一個個具體的「對象」,每個對象都擁有相同的方法,但各自的數據可能不同。

用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。

類變數:

類變數在整個實例化的對象中是公用的。類變數定義在類中且在函數體之外。類變數通常不作為實例變數使用。

數據成員:

類變數或者實例變數, 用於處理類及其實例對象的相關的數據。

方法重寫:

如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。局部變數:定義在方法中的變數,只作用於當前實例的類。

實例變數:

在類的聲明中,屬性是用變數來表示的。這種變數就稱為實例變數,是在類聲明的內部但是在類的其他成員方法之外聲明的。

繼承:

即一個派生類(derived class)繼承基類(base class)的欄位和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關係(例圖,Dog是一個Animal)。

實例化:

創建一個類的實例,類的具體對象。

方法:

類中定義的函數。

對象:

通過類定義的數據結構實例。對象包括兩個數據成員(類變數和實例變數)和方法。

例子:

class dog():      #定義一個名字為dog的類      def __init__(self,name,type):          self.name = name          self.type = type        def what(self):          print(self.name+"是一隻"+self.type)    if __name__ == '__main__':      do= dog('小黃','金毛')      dog.what(do)      do.what()

第一種方法__init__()方法是一種特殊的方法,被稱為類的構造函數或初始化方法,當創建了這個類的實例時就會調用該方法,通常都是用這個__init__()來設置類對象的屬性。

self 代表類的實例,self 在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數

而那個what()函數就是在類裡面定義的類函數,類對象就可以直接調用這個函數來使用類方法。

self代表類的實例,而非類

類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self。

這裡可以看得出來self就是一個dog object

創建實例對象:

 do= dog('小黃','金毛')

實例化類時,其他程式語言中一般用關鍵字 new,但是在 Python 中並沒有這個關鍵字,類的實例化類似函數調用方式。

訪問類實例的屬性:

您可以使用點號 . 來訪問對象的屬性。使用如下類的名稱訪問類變數,也可以用點號 . 來訪問類的方法。

數據封裝:

面向對象編程的一個重要特點就是數據封裝。在上面的dog類中,每個實例就擁有各自的name和type這些數據。我們可以通過函數來訪問這些數據,比如列印一個dog的name和type,可以通過調用類的方法來獲取實例的屬性,這樣就可以實現數據的封裝。

訪問限制

要實現數據封裝,就要給數據加訪問限制,即把對象的或者稱實例的屬性封鎖起來,在屬性名的前面加兩個下劃線'__',這樣類的對象的屬性就只能通過內部的函數去調用,外部就不能直接調用類對象的實例的屬性。