詳解Python物件導向程式設計之類、例項、方法

bluepeach發表於2021-09-11

詳解Python物件導向程式設計之類、例項、方法

物件導向程式設計

程式導向程式設計:Procedure Oriented Programming,簡稱POP。在之前的介紹中,多是用程式導向的思想。程式導向的思想是一種是事件為中心的程式設計思想,即分析出解決問題所需的步驟,然後用函式把這寫步驟實現,把大塊函式切成小塊函式,並按順序呼叫。

物件導向程式設計:Object Oriented Programming,簡稱OOP。物件導向的思想就是以物件為中心的程式設計思想,程式的執行過程就是一系列資訊在各個物件之間傳遞的過程。

什麼是物件?在Python中,一切的資料型別都可視為物件,“萬物皆物件”。

類 Class

Class,類,是物件導向程式設計最重要的概念之一。類是抽象的模板,而例項就是根據類建立出來的物件。比如:

例項
杯子 馬克杯、玻璃杯、高腳杯...
動物 貓、狗、兔子...
電器 冰箱、電視、空調...

類的定義

在Python中,透過class關鍵字來定義一個類:

class Animal(object):
    pass

Animal是類名,類名一般以大寫字母開頭,後面( )表示該類從哪一類繼承,若沒有合適的繼承類,就用object,因為所有類都會繼承該類,繼承是物件導向的三大特徵之一,後面會介紹。

類的屬性

完成了類的定義之後,我們可以定義類的屬性,如:

class Animal(object):
    name = 'animal'

呼叫其屬性時,用“物件名.屬性名”的形式來呼叫,如:

>>>Animal.name
animal

例項 Instance

Instance,例項,是物件導向程式設計最重要的概念之一。例項就是根據類建立出來的物件。事實上,物件導向程式設計就是對“類”和“例項”的使用。

例項的定義

有了類之後,就可以根據類來定義對應的例項。

>>>dog = Animal()>>>dog
<__main__.Animal object at 0x0000000001DB8780>

上面dog就是Animal的一個例項,後面的0x0000000001DB8780便是記憶體地址。

例項的屬性

同樣的,我們可以定義例項的屬性

>>>dog.name = 'dog'
>>>dog.name
dog

由於類是例項的一個模板,一般而言,我們在定義類的時候就可以把對應例項的屬性給繫結上去。這需要在類裡面定義一個__init__方法(方法類似於函式,在後面會介紹),如

class Animal(object):

    name = 'animal'
    
    def __init__(self,name,age):
        self.name = name
        self.age = age

注意到__init__方法的第一個引數永遠是self,表示建立例項本身,self就是指向例項的,隨後加入需要的引數。這樣在建立例項時就要輸入對應的引數了,但是self引數不需要輸入,因為Python直譯器自己會把例項變數傳進去。

>>>dog = Animal('dog',3)
>>>dog.name
dog
>>>dog.age
3

需要注意的是,例項可以訪問到其類的屬性,如我們將dog的name屬性刪掉再呼叫。

>>>del dog.name
>>>dog.name
animal

可見,在dog訪問了Animal的name屬性,而當dog有name屬性時則優先訪問dog的屬性。

方法

方法可以理解成在類中定義的函式,與函式不同的一點是,方法的第一個引數一定是self,而其他與函式相同,同樣可以用預設引數、可變引數、關鍵字引數和命名關鍵字引數。

上面的__init__就是一個方法,當然,我們還能定義其他的方法,比如我們在Animal中增加一個say方法:

class Animal(object):

    name = 'animal'
    
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def say(self):
        print('wow...wow')

可以透過例項來呼叫方法,形式是“例項名.方法名(引數)”,如

>>>dog = Animal('dog',3)
>>>dog.say()
wow...wow

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2558/viewspace-2837114/,如需轉載,請註明出處,否則將追究法律責任。

相關文章