物件導向程式設計思想之路

2021-10-05 06:41:16 字數 3050 閱讀 5946

最近一直在學習物件導向程式設計的思維,逐漸的理解是最大的收穫了,對本週學習的筆記進行乙個小結(可能會比較亂),如果有更好的學習方法也請推薦一波吧!

一.物件導向的三個基本特徵。

1. 封裝性

2. 繼承性

3. 多型性

① 定義類:格式:

class 類名(父類):

類體進一步採用 《物件名》.《屬性名》 or 《物件名》.《方法名》() 體現類功能

例項變數

def __init__(self,《其他引數》)

類變數類中的變數,所有例項(或物件)所共有

構造方法

__init__不用傳入self引數

例項方法

self.例項變數。 呼叫例項方法不需傳入self引數

類方法類物件的方法,由所有例項物件共享。採用 《類名》.《方法名》(《引數列表》) or《物件名》.《方法名》(《引數》)注意☆:1.需要加@classmethod裝飾器 2. 第乙個引數約定為cls

靜態方法

定義在類中的普通函式,能夠被所有例項物件共享。 採用《類名》.《方法名》(《引數》) or 《物件名》.《方法名》(《引數》) 注意☆:1.靜態方法可以沒有引數。2.需要加@staticmethod宣告3.不可以操作例項屬性和例項方法

自由方法

類中的普通函式。例項方法採用《物件名》.《方法名》(《引數》)方法使用

保佑方法

由雙下劃線開始和結束的方法。e.g. __len__()

私有方法

只需要在方法前加雙下劃線即可def __run(self): 接函式體

私有變數:在變數前 下雙下劃線__,(並非真正私有),如要訪問,命名規律為_類名__變數 就可以訪問量。

② 繼承性

super()函式:可以訪問已在類物件中覆蓋的繼承方法。

from abc import abcmeta, abstractmethod

class

pet(

object

, metaclass=abcmeta)

:"""寵物"""

def__init__

(self, nickname)

: self._nickname = nickname

@abstractmethod

defmake_voice

(self)

:"""發出聲音"""

pass

class

dog(pet)

:"""狗"""

defmake_voice

(self)

:print

('%s: 汪汪汪...'

% self._nickname)

class

cat(pet)

:"""貓"""

defmake_voice

(self)

:print

('%s: 喵...喵...'

% self._nickname)

defmain()

: pets =

[dog(

'旺財'

), cat(

'凱蒂'

), dog(

'大黃')]

for pet in pets:

pet.make_voice(

)if __name__ ==

'__main__'

: main(

)

多繼承的特點

當子類例項呼叫乙個方法時,先從子類中查詢,如果沒有找到則查詢父類。

查詢順序安子類宣告父類列表從左往右中查詢,如找不到父類再找父類的父類。

多型的概念:1.繼承——多型發生一定是子類和父類之間

2.重寫——子類重寫父類的方法

③ 列舉類(本質上也是一種類: import enum)

在python 中定義列舉類語法格式如下:

class 列舉類名 (enum.enum):

列舉常量列表

列舉類繼承自enum.enum 類。 列舉中會定義多個常量成員。給個示例:

import enum

class

weekday

(enum.enum)

:#列舉常量列表

monday =

1 tuesday =

2 wednesday =

3 thursday =

4 friday =

10day = weekdays.friday

print

(day)

print

(day.value)

print

(day.name)

輸出結果:

weekdays.friday

10friday

4.限制列舉類

為了使列舉常量成員只能是整數型別: enum.intenum作為父類

防止常量重複: @enum.unique 裝飾器(如果常量重複報錯)

**示例:

import enum

@enum.unique #裝飾器

class

weekday

(enum.intenum)

:#只能是整數型別

#列舉常量列表

monday =

1 tuesday =

2 wednesday =

3 thursday =

4 friday =

10day = weekdays.friday

print

(day)

print

(day.value)

print

(day.name)

如果嘗試將其中的成員值修改為非整數型別,或者修改相同值,則發生異常。

物件導向程式設計思想

舉個最簡單點的例子來區分 有一天要請客吃飯,怎麼辦?有兩個方法 1 買菜,買調料,買肉,買酒水,然後下廚房動手炒菜 2 去飯店,點個 看出來區別了嗎?方法1是面向過程,方法2是物件導向。物件導向有什麼優勢?首先不需要知道各種菜式是怎麼做的,降低了耦合性。如果突然想換 了,對於方法1可能不太容易,因為...

物件導向程式設計思想

所謂的物件導向,是一種程式設計思想,程式設計思路,的書寫格式,複雜程式的封裝,封裝成其他形式,使用物件導向的方式來封裝程式。物件導向 有封裝好的物件導向的的程式 直接呼叫執行就可以了 功能和作用類似於 封裝好的函式 但是 封裝的語法和思想與函式不同 物件導向的基本思想 基本思路就是,建立乙個物件,給...

物件導向程式設計思想

介面是為了處理各個物件之間的協作關係,是系統設計的關鍵部分,主要作用是為了將 定義 與 實現 分離,從而實現系統解耦的目的。在系統設計之初,我們要為抽象類建立行為模型 為什麼要面向介面程式設計?因為物件導向設計原則為我們提供了方法和原則 七大原則 開 面向擴充套件開放,面向修改關閉 口 介面隔離原則...