面向對象

  

1、編程模式

面向過程  根據業務實現流程和邏輯,逐步完成python

函數式編程  將功能寫入函數,方便調用數據庫

面向對象  將函數打包,用類封裝,實現更強大功能,更符合人對世界的認知過程編程

 

2、面向對象編程(Object Oriented Programming,OOP,面向對象程序設計)的實現過程

 類是個封裝器,是用來封裝方法和數據的。函數式編程

不是全部狀況都適用面向對象編程。函數

 

 

 

 class 類名:fetch

  def 方法(self,arg):    #self形式參數不能省略spa

    pass設計

obj = 方法()    #建立實例/對象,對象實現類中的方法code

 

 

class lei:
    def fetch(self):
        print(self.backend)

    def add_record(self):
        print(self.backend)

    def del_record(self):
        print(self.backend)

obj = lei()
obj.backend = "www.baidu.com"  #在對象中封裝數據
obj.fetch()
obj.add_record()  #執行方法,執行過程當中根據self去obj對象中讀取已經封裝的數據
obj.del_record()

"""
www.baidu.com
www.baidu.com
www.baidu.com
"""

 

  • 面向對象:【建立對象】【經過對象執行方法】
  • 函數編程:【執行函數】

函數式編程的應用場景 --> 各個函數之間獨立且無共用的數據對象

 

3、面向對象三大特性

封裝、繼承和多態。

 

封裝

封裝,顧名思義就是將內容封裝到某個地方,之後再去調用被封裝在某處的內容。

因此,在使用面向對象的封裝特性時,須要:

  • 將內容封裝到某處
  • 從某處調用被封裝的內容

 

繼承

子類繼承父類

某一隻狗就是隻是狗中的一員,不會是貓,不克隆有貓的那些共有特徵和能力。

對於面向對象的繼承來講,其實就是將多個類共有的方法提取到父類中,子類僅需繼承父類而沒必要一一實現每一個方法。

 

 

 

派生類能夠繼承基類中全部的功能

派生類和基類同時存在,優先找派生類

 

 

python類能夠同時繼承多個類(C#,Java不能夠)
優先:本身,左邊,右邊

 

 

多繼承

 

 

 

擴展:
  重載:函數名相同,參數個數不一樣(python不支持)
  重寫:派生類中從新實現基類中的方法

 

 

 

 

 

多態

 多態就是多種形態。

python是原生多態。

 

 

類+括號  >>> 自動執行類中的__init__方法

在__init__方法中執行具體封裝的操做

__init__有一個特殊的名字:構造方法     >>>初始化

 

__del__ 解釋器銷燬對象的時候自動調用,特殊的名字:析構方法

 

 

封裝:

使用場景:當同一類型的方法具備相同的參數時,直接封裝到對象便可。

使用場景:把類看成模板,建立多個對象(對象內封裝的數據能夠不同)

 

 

 

單例模式

單個實例。

 

使用場景:

  建立的實例都是同樣的,沒有必要在內存中保存多份,可歸結爲一個對象。

  數據庫連接池

  實現方式:靜態方法 + 靜態字段

 

class ConnectionPoll:
    __instance = None

    def __init__(self):
        self.ip = "1.1.1.1"
        self.port = 3306
        self.pwd = 123
        self.username = "root"

        self.conn_list = [1,2,3,4,5,6,7]

    @staticmethod
    def get_instance():
        if ConnectionPoll.__instance:
            return ConnectionPoll.__instance
        else:
            ConnectionPoll.__instance = ConnectionPoll()
            return ConnectionPoll.__instance

obj1 = ConnectionPoll.get_instance()
print(obj1)
obj2 = ConnectionPoll.get_instance()
print(obj2)

"""
<__main__.ConnectionPoll instance at 0x026315D0>
<__main__.ConnectionPoll instance at 0x026315D0>
"""
相關文章
相關標籤/搜索