python 物件導向及封裝繼承和多型

2022-08-26 01:00:18 字數 3203 閱讀 9489

######裝飾器######

裝飾器的概念

- 裝飾器的實現是函式裡面巢狀函式;

- 裝飾器的本質是乙個函式, 它可以讓其他函式在不需要做任何**改動的前提下增加額外的功能;

- 裝飾器需要傳遞乙個函式, 返回值也是乙個函式物件.

######物件導向#######

一、物件導向的基本概念

面向過程和物件導向,是兩種不同的程式設計方式

對比面向過程的特點,可以更好的了解什麼是物件導向

過程和函式(都是對一段功能的**進行封裝)

過程:是早期的乙個程式設計概念

過程類似於函式,只能執行,但是沒有返回值

函式:不僅能執行,還可以返回結果(return)

二、面向過程 和 物件導向 的基本概念

面向過程:---側重於怎麼做?

1.把完成某乙個需求的 所有步驟 從頭到尾 逐步實現

2.根據開發要求,將某些功能獨立的**封裝成乙個又乙個函式

3.最後完成的**,就是順序的呼叫不同的函式

特點:1.注重步驟與過程,不注重職責分工

2.如果需求複雜,**會變得很複雜

3.開發複雜專案,沒有固定的套路,開發難度很大

相比較函式,物件導向是更大的封裝,根據職責在乙個物件中封裝多個方法

1.在完成某乙個需求前,首先確定職責--要做的事(方法)

2.根據職責確定不同的物件,在物件內部封裝不同的方法(多個)

3.最後完成**,就是順序的讓不同的物件呼叫不同的方法

特點:1.注重物件和職責,不同的物件承擔不同的職責

2.更加適合對複雜的需求變化,是專門應對複雜專案的開發,提供的固定套路

3.需要在面向過程的基礎上,再學習一些物件導向的語法

三、物件導向的兩個核心概念

1.類和物件的概念

類和物件是物件導向程式設計的兩個核心概念

類:是對一群具有相同特徵或行為的事物的乙個統稱,是抽象的,不能直接使用(就好比,飛機圖紙不能直接飛上天)

特徵:被稱為屬性

行為:被稱為方法

類 就相當於製造飛機時的圖紙,是乙個模板,是負責建立物件的

__del__方法:

在python中

當使用類名()建立物件時,為物件分配完空間後,自動呼叫__init__方法

當乙個物件被從記憶體中銷毀前(把這個物件從記憶體中刪除掉),會自動呼叫__del__方法

應用場景

__init__改造初始化方法,可以讓建立物件更加靈活

__del__如果希望在物件被銷毀前,再做一些事情,可以考慮一下__del__方法

生命週期(出生到死亡)

乙個物件從呼叫類名()建立,生命週期開始

乙個物件的__del__方法一但被呼叫,生命週期結束

在物件的生命週期內,可以訪問物件屬性,或者讓物件呼叫方法

__str__方法:

在python中,使用python輸出物件變數,預設情況下,會輸出這個變數引用的物件是由哪》乙個類建立的物件,以及在記憶體中的位址(十六進製制表示)

如果在開發中,希望使用print輸出物件變數時,能夠列印自定義的內容,就可以利用__str__這個內建方法了

七、私有屬性和私有方法

應用場景

在實際開發中,物件的某些屬性或方法可能只希望在物件的內部使用,而不希望在外部被訪問到

私有屬性 就是 物件 不希望公開的 屬性

私有方法 就是 物件 不希望公開的 方法

#####封裝#######

1.封裝是物件導向程式設計的一大特點

2.物件導向程式設計的第一步,將屬性和方法封裝到乙個抽象的類中(為什麼類是抽象的?)

3.外界使用類建立物件,然後讓物件呼叫方法

4.物件方法的細節都被封裝在類的內部

######繼承######

實現**的重用,相同的**不需要重複的寫

繼承的傳遞性

1.c 類從b類繼承 ,b類又從a類繼承

2.那麼c類就具有b類和a類的所有屬性和方法

class a:

def eat(self):

print 'eat'

class b(a):

def drink(self):

print 'drink'

class c(b):

def sleep(self):

print 'sleep'

tom =c()

tom.eat()

tom.drink()

tom.sleep()

方法的重寫

1.覆蓋父類的方法(重寫父類方法)

2.對父類方法進行擴充套件

class a:

def eat(self):

print 'eat'

class b(a):

def drink(self):

print 'drink'

class c(b):

def sleep(self):

print 'sleep'

def eat(self):

print '餓'

tom =c()

tom.eat()

tom.drink()

tom.sleep()

---------

餓drink

sleep

---------

多繼承子類擁有乙個父類叫作單繼承

子類可以擁有多個父類,並且具有所有父類的屬性和方法

例如:孩子會繼承自己父親和母親的特徵

class a:

def eat(self):

print 'eat-a'

def drink(self):

print 'drink-a'

class b(a):

def drink(self):

print 'drink-b'

def eat(self):

print 'eat-b'

class c(b,a):

pass

tom =c()

tom.eat()

tom.drink()

--------

eat-b

drink-b

--------

####.多型#####

不同的子類物件呼叫相同的方法,產生不同的執行結果

1.多型可以增加**的靈活度

2.以繼承和重寫父類的方法為前提

3.呼叫方法,不會影響到類的內部設計

物件導向(封裝 繼承)

1.類的訪問修飾符有public private internal protected。其中pubulc 公共的,只要引用了命名空間,就可以隨意進行訪問 private 私有的,只有當前類內部才可以訪問 internal 內部的,當前程式集內可以訪問,程式集就是命名空間,此修飾符是預設的 prote...

物件導向 封裝 繼承

建構函式 建構函式 建立乙個類的函式 每乙個類都有建構函式,訪問修飾符必須是public的,並且不需要寫任何返回值,方法名與類名一致 自己寫的類 使用者自定義型別 如果要使用自定義型別產生出來的 物件 必須有乙個例項化的過程 例項化格式 型別名 ss new 建構函式 訪問修飾符 4個 public...

物件導向 封裝 繼承 多型

物件導向 封裝 繼承 多型物件導向 封裝 一 封裝 private 資料型別 名字 成員變數 public 預設一致 名字 屬性 set 類中不僅可以有成員變數和屬性,還可以有成員方法 訪問修飾符 4個 public 公共的,任何地方都可以訪問,但是需要引用 命名空間 private 私有的,類的內...