物件導向總結

2021-09-10 23:26:45 字數 4011 閱讀 2570

物件導向:它是一種程式設計思想,一種通過多個物件之間互相協作完成功能處理流程的程式設計思路,它是相對於面向過程而言的,是面向過程程式設計思想的補充和完善,更加適用於處理複雜業務流程的系統開發。

封裝:體現了物件對於敏感資料的保護特徵

繼承:體現了**的復用和功能的擴充套件

多型:體現了不同操作環境中**的多樣性【程式的健壯性】

思路:大量的程式開發、大量的問題解決-> 處理問題的固定步驟-> 成熟的處理方式-> 思路

類(class):就是物件的型別,代表了某一批物件的共同特性和特徵。類是物件的抽象,而物件是類的具體例項

物件:客觀世界裡的一切事物都可以看作是乙個物件,每乙個物件應當具有屬性(靜態特徵,比如乙個班級,乙個專業,乙個教室)和行為(動態特徵,例如:學習,開會,體育比賽等)兩個要素。 物件是由一組屬性和一組行為構成的。

型別的定義

型別定義語法規則

操作步驟:

建立型別->定義特徵->定義行為

操作規範:型別名稱~帕斯卡命名法:乙個或者多個單詞組成,每個單詞首字母大寫

特徵【屬性】~

【不推薦】駝峰命名法:乙個或者多個單詞組成,第乙個單詞全部小寫,後面每個單詞首字母大寫

【店家推薦】下劃線命名法

行為【方法】~ 參考屬性命名規範

class person:

def __init__(self,name):

self.name = name

def eat(self):

print(f"吃冰激凌")

型別只是乙個宣告、只是乙個概念,就類似於函式的存在,並不包含具體資料。

物件是通過型別建立的,物件中會包含具體的資料。

p = person("大帥比")
p.eat()
類物件,好比有一籃「水果」,籃子裡面的水果沒有重複,那麼這一籃中的「水果」就屬於乙個類,是抽象的,就像有人對你說「給我水果」,你的第一反應一定是「什麼水果?」,所以是不確定性的。

例項物件,好比籃子裡面的「蘋果」,是乙個具體的物件,即乙個例項。我想有人對你說「給我蘋果」,你應該不會想選擇哪個水果吧

將全部屬性私有化【使用兩個下劃線開頭,描述該屬性是私有的,外界不能直接訪問】

給每個屬性,提供set/get訪問方法

在訪問方法中,就可以新增訪問限制,保護資料安全

物件導向繼承的意義【**冗餘、功能擴充套件】

1.在python中實現的封裝操作,不是通過許可權限制而是通過改名(name mangling 改名策略)實現的,名字變了找不到而已。

2.可以使用 __dict__可以檢視屬性(包括私有屬性)的值

在類的內部使用私有屬性,python內部會自動進行轉換成 _類名__屬性名。

在類的外部不能給物件新增私有屬性因為不能轉換成_類名__屬性名型別。

3.可以通過 物件名._類名__方法或類名._類名__方法名訪問到(但禁止這麼幹)

可以使用 _類名__私有屬性名來獲取值。但是一般情況下不要使用,了解即可

誤區:什麼樣的屬性應該封裝?封裝的話是不是一定要新增限制訪問條件?

(1) 為了讓定義的資料型別,能使用不同的應用場景,一幫情況下我們

要對當前型別的所有屬性進行封裝處理。

(2) 封裝屬性之後,會提供訪問屬性資料的set/get方法,開發過程中方法中不需要新增

任何限制條件,只是預留了可以新增限制條件的方法而已,後期根據專案需求進行限制

條件的完善。

誤區:私有屬性,完全不能直接訪問

我們定義了私有屬性,就是兩個下劃線開頭的屬性

理論上外界不能直接訪問,而是要通過我們提供的set/get方法間接訪問

功能開發過程中,**和功能都可能會存在一些問題

如果發現問題~一定要及時溝通,而不是私自修改。

體現的是,某個小型別,屬於某個大型別的

如:男人 是 人 的一種型別

生活中:約定

**中:約定 man型別就是person型別 非強制

**中:強制約束:通過繼承關係,體現某個型別屬於另乙個型別

繼承的語法:

class 型別名稱(要繼承的型別):

pass

繼承中方法重寫什麼意思?怎麼操作

子類和父類中擁有方法名相同的方法,說明子類重寫了父類的方法

重寫的作用:父類中已經有了這個方法,但子類想修改裡面的內容,直接修改父類是不好的,就需要用到重寫

繼承時從父類預設繼承了什麼方法?

子類中就可以繼承父類中的屬性和方法【公共】

子類中可以直接使用父類的屬性和方法

構造方法

new建立物件的方法 一般不使用~直接通過父類建立物件即可。

init初始化資料的方法 一般會重寫該方法,用來初始化物件資料

slots封裝時,限制屬性的

str物件字元列印方式;預設情況列印記憶體中16進製表示的位置

repr互動模式中,字元列印方式

hash獲取兌現的hash資料,用於判斷的依據

ne不等於:not equals;兩個物件使用!=判斷的

ge大於等於:grant or equals 判斷 >=

gt大於: grant than判斷 >

le小於等於:less or equals 判斷 <=

lt小於 less than 判斷 <

eq判斷等於 equals 判斷 ==

dict將物件轉換成字典

doc說明文件

class型別,類似於type

format

getattribute

delattr

sizeof

reduce

reduce_ex

dir

__init_subclass

module

setattr給屬性設定資料-一般不重寫

雙下劃線開頭和結尾的方法:型別的魔法方法

多繼承的意義

乙個物件在不同的場景中,可能扮演不同的角色,使用多繼承,減少**冗餘

 多繼承的方法查詢順序【python3 | python2經典類】

在python2 中:查詢順序是按照深度優先

在python3 中:查詢順序是按照廣度優先

執行時多型

在執行過程中~如果子類中重寫了方法,執行子類的方法,如果沒有重寫則執行父類中的方法【執行過程中的多種狀態切換:執行時多型】

設計時多型

python中的多繼承

體現的是什麼樣的程式設計思想:乙個物件在不同場景中,可能扮演不同的角色【設計時多型】

多型~和封裝以及繼承不同的是,沒有固定的語法,沒有固定的思路,只有操作的方式。

從專案中體現。

物件導向總結

成員變數 1.類中,方法外 2.建立物件存在與堆中,物件被 時一併消失 3.成員變數有預設值 區域性變數 1.方法中 2.呼叫方法存在於棧幀中,方法呼叫完畢隨棧幀一併消失 3.區域性變數沒有預設值 public class koo 重寫遵循 兩同兩小一大 兩同 1.方法名稱相同 2.引數列表相同 兩...

物件導向總結

1 類與物件的區別 類是物件的抽象,物件是類的例項 2 成員變數 與 區域性變數區別 1 定義在類中 定義在方法中 2 作用在類中 作用於整個方法 3 系統自動初始化 使用前必須初始化 4 隨物件一同載入到堆中,物件無引用時銷毀 在方法呼叫時,在棧中產生一塊棧幀,方法執行完後消失3 封裝實現 1 屬...

物件導向總結

物件導向的程式設計關注於類的設計!1 乙個專案或工程,不管多龐大,一定是有乙個乙個類的構成的。2 類是抽象的,好比是製造汽車的圖紙。而具體的一輛一輛的車,是根據圖紙製造的,實際上就是類的例項化 3.完成乙個專案 或功能 的思路 1 所要完成的功能對應的類的物件是否存在 2 若存在,則通過物件直接呼叫...