python之物件導向程式設計(一)

皛心發表於2020-11-02

物件導向程式設計的定義

物件導向程式設計的核心是物件,即某一可有屬性、動作的複雜事物。優先考慮物件和需要達到的結果,不重點關注流程。

物件導向程式設計的優點是程式的可維護高和擴充套件性強,採用物件導向程式設計可以大幅提高多團隊開發效率,在需求變化快的場景物件導向程式設計應對需求變化更容易。

物件導向程式設計的缺點是可控性差,無法精準預測問題的處理流程和結果。

物件導向程式設計常用名詞

類:具有某些類似特徵的一類事物(如動物、植物等),類是模板,是抽象概念。

物件(例項):具體的某一事物(如那隻流浪貓、這隻寵物狗),物件是具體的事物,是具體事物。

例項化:根據類建立具體物件的過程。

類的定義

class 類名(父類):
    '''說明文件'''
    類體

其中(父類)可預設,預設父類是object,可以把object理解為類的祖先。

class語句下一行三引號開頭和三引號結束中的內容為類的說明文件。

說明文件下一行即為類的正式內容,即類體。

類體中主要內容有2種,一是屬性、二是函式。

例如:

class Animal:
    kind = 'all animals'

    def eat(self):
        print('The animal is eating!')


print(Animal.kind)
Animal.eat(Animal)

out:
all animals
The animal is eating!

以上案例中kind是屬性,eat是函式。

注意eat比較特殊,如果用類名.eat呼叫時它是函式,用物件.eat呼叫時它是方法。

例項化

類名加括號就是例項化,會自動觸發__init__函式的執行,它會根據引數為每個例項定製自己的特徵。

white_cat = Animal()
print(white_cat.kind)
white_cat.eat()

out:
all animals
The animal is eating!

注意:例項化時會找該類的__init__函式,若該類無此函式,那麼會找它父類的__init__函式,父類若沒有會繼續向上找祖父類__init__函式,直至找到object類中的空__init__函式。

函式和方法的區別

學python時經常會有人搞不清楚函式和方法的區別。在此通過案例來搞清楚它們的區別。

from types import FunctionType, MethodType


class Animal:
    kind = 'all animals'

    def eat(self):
        print('The animal is eating!')

        
white_cat = Animal()
print(isinstance(Animal.eat, FunctionType))  # 判斷Animal.eat是不是函式
print(isinstance(white_cat.eat, FunctionType))  # 判斷white_cat.eat是不是函式
print(isinstance(Animal.eat, MethodType))  # 判斷Animal.eat是不是方法
print(isinstance(white_cat.eat, MethodType))  # 判斷white_cat.eat是不是方法

out:
True
False
False
True

通過以上案例得出結論:

類.變數名()呼叫時,該變數名是函式。

變數名()呼叫時,該變數名是函式。

例項.變數名()呼叫時,該變數名是方法。

相關文章