溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python基礎(chǔ)【面向?qū)ο蟆?/h1>
發(fā)布時(shí)間:2020-08-25 14:52:10 來(lái)源:網(wǎng)絡(luò) 閱讀:288 作者:流域哈哈 欄目:編程語(yǔ)言

面向?qū)ο?/h2>

從面向過(guò)程到面向?qū)ο?/h3>

面向過(guò)程

在計(jì)算機(jī)編程發(fā)展之初,解決一個(gè)客觀問(wèn)題的思路往往是通過(guò)設(shè)計(jì)算法
去對(duì)數(shù)據(jù)進(jìn)行分析處理最終給出結(jié)果。

        例如:完成一組數(shù)據(jù)的排序,生成特定的數(shù)列
        從一組數(shù)據(jù)中篩選出符合條件的數(shù)據(jù)等等。

在面向過(guò)程的編程中,解決問(wèn)題是以功能為起點(diǎn)
分析問(wèn)題主要從**依附在事物上的行為** 出發(fā)
面向過(guò)程的編程重在 **如何一步步完成這一行為** 

        例如:顧客購(gòu)物可以簡(jiǎn)要描述為:
                    顧客進(jìn)入商店,選擇商品,付錢,離開(kāi)商店

為什么需要**面向?qū)ο?*?

但隨著需要解決的問(wèn)題的規(guī)模和復(fù)雜度逐漸增加
面向過(guò)程的思想在進(jìn)行程序設(shè)計(jì)時(shí)
需要分析和處理的數(shù)據(jù)就變得非常龐大
不利于設(shè)計(jì)者對(duì)問(wèn)題的分析和處理,并且在一定程度上限制了程序的運(yùn)行效率。

面向?qū)ο蟮乃季S

客觀事物描述的時(shí)候往往圍繞著 **從中抽象出的主要個(gè)體**
        例如:購(gòu)物這一事件圍繞 顧客、店主 和 商品 發(fā)生。

在對(duì) **個(gè)體** 進(jìn)行數(shù)據(jù)分析時(shí),往往可以通過(guò)一些 **特性(具有的屬性)和行為(進(jìn)行的動(dòng)作)** 進(jìn)行描述
        例如:顧客擁有 現(xiàn)金余額 等屬性,可以實(shí)施 購(gòu)買商品 等行為。

這些獨(dú)立的個(gè)體都可以進(jìn)行相應(yīng)的**數(shù)據(jù)處理**,相互之間可以進(jìn)行**信息的傳遞**,作為獨(dú)立的通信個(gè)體

事實(shí)上,客觀事物描述時(shí)大多都可以抽象成 **多個(gè)獨(dú)立對(duì)象之間進(jìn)行信息傳遞和處理** 的類似模型來(lái)進(jìn)行分析。

換句話說(shuō),相比面向過(guò)程代碼復(fù)雜度隨著行為的多變性增加,面向?qū)ο蟮乃季S在編程時(shí)更為通用,獨(dú)立對(duì)象的行為/屬性變化不會(huì)影響其他部分,更不會(huì)導(dǎo)致整體需要調(diào)整。

在具體問(wèn)題中,抽象出的有用的對(duì)象屬性和行為越具體,描述越精確,抽象出的模型越接近現(xiàn)實(shí)情況,具體需要抽象到什么程度,需要根據(jù)需求進(jìn)行分析。

        例如:
                    如果只需要知道顧客購(gòu)買了什么商品,方便統(tǒng)計(jì)數(shù)量,可以通過(guò)添加商品對(duì)象,對(duì)其數(shù)量進(jìn)行統(tǒng)計(jì)分析即可
                    但如果還需要進(jìn)行財(cái)務(wù)管理,就需要給商品增加價(jià)格這一屬性,進(jìn)一步進(jìn)行數(shù)據(jù)處理

面向?qū)ο蠛兔嫦蜻^(guò)程的關(guān)系

盡管面向?qū)ο笤诿鎸?duì)復(fù)雜問(wèn)題時(shí)具有較大優(yōu)勢(shì),面向過(guò)程仍為面向?qū)ο蟮幕A(chǔ)

對(duì)象的行為如何實(shí)施,對(duì)象之間的數(shù)據(jù)傳遞和處理等仍需要面向過(guò)程的思想為基礎(chǔ)進(jìn)行編寫(xiě)。

面向?qū)ο缶幊讨械幕靖拍?個(gè)人理解)

類:具有同一類屬性和方法的對(duì)象的集合(模板)(類也可看作是一種數(shù)據(jù)結(jié)構(gòu))

方法:定義在類中的函數(shù)

對(duì)象:具有類中屬性和方法的具體的獨(dú)立個(gè)體,即類的實(shí)例化個(gè)體

類變量(類屬性):定義在類中(方法外)的變量,類和實(shí)例對(duì)象通用,可以在外部直接通過(guò)類名(對(duì)象名).屬性名的形式進(jìn)行訪問(wèn)

類對(duì)象:類本身也是一個(gè)特殊對(duì)象,在創(chuàng)建類時(shí),會(huì)在內(nèi)存中存放

實(shí)例化:創(chuàng)建一個(gè)具體的對(duì)象即為類的實(shí)例化

繼承:在定義類A時(shí),可以在類名后加(B),其中B也為一個(gè)類對(duì)象,表示A類擁有B類的屬性和方法,無(wú)需重新定義,類似于現(xiàn)實(shí)生活中的繼承關(guān)系,A類也可在定義中添加自己的屬性和方法。

方法重寫(xiě):當(dāng)繼承父類的方法無(wú)法滿足需求時(shí),派生類(子類)可以在類內(nèi)重寫(xiě)方法(同名)以滿足需求

基類(父類):A類繼承B類的屬性和方法,則A類就是B類的基類(父類)

派生類(子類):A類繼承B類的屬性和方法,則B類就是A類的派生類(子類)

面向?qū)ο蟮娜筇匦?相比面向過(guò)程)

封裝

面向?qū)ο蟮恼Z(yǔ)言將某個(gè)個(gè)體的屬性和行為進(jìn)行封裝**(類)**,作為一個(gè)獨(dú)立的邏輯單元進(jìn)行分析處理

繼承

子類從父類中繼承其屬性及方法,也可在子類中加入新的屬性及方法

多態(tài)

相同的 函數(shù)或數(shù)據(jù) 作用或傳遞 到不同的對(duì)象中,執(zhí)行或處理 的結(jié)果也不同

類的定義

class A: # A為類名
    variable=0 # 類變量
    def __init__(self): # 初始化方法
        函數(shù)體
    def fun(self): # 方法
        函數(shù)體

類的實(shí)例化(利用類創(chuàng)建對(duì)象)

a = A # 以類A為模板創(chuàng)建一個(gè)名為a的對(duì)象
屬性訪問(wèn)
print (a.variable) # 輸出類變量的值,利用對(duì)象名.變量名訪問(wèn)
方法調(diào)用
a.fun() # 調(diào)用方法

方法:

普通方法:

方法在類中定義時(shí)
參數(shù):會(huì)強(qiáng)制添加第一個(gè)參數(shù)并指向類的實(shí)例化對(duì)象(默認(rèn)參數(shù)名為self,也可自行定義)
調(diào)用方式:對(duì)象名.方法名()

類方法:

類方法:利用classmethod裝飾的方法
參數(shù):會(huì)強(qiáng)制添加第一個(gè)參數(shù)并指向類本身(默認(rèn)參數(shù)名為cls,也可自行定義)
調(diào)用方式:類名.方法名() 或者 對(duì)象名.方法名()

靜態(tài)方法 :

靜態(tài)方法 :利用staticmethod裝飾的方法
參數(shù):沒(méi)有強(qiáng)制參數(shù),形式上與普通函數(shù)無(wú)異,只是在類中
調(diào)用方法:類名.方法名() 或者 對(duì)象名.方法名()

注:

- 方法中self參量指向**實(shí)例對(duì)象**,類方法中cls參量指向**類本身**,可用于在方法中訪問(wèn)實(shí)例/類中的屬性和方法
- 類自身也是一種特殊的對(duì)象

例:

class A: # 定義A類
    def fun(self): # 普通方法
        ...
    此處應(yīng)有at符classmethod
    def class_fun(cls): # 類方法
        ...
    此處應(yīng)有at符staticmethod
    def static_fun(): # 靜態(tài)方法
        ...
a = A # 以A為模板創(chuàng)建名為a的對(duì)象
a.fun() # 調(diào)用普通方法
A.class_fun() # 類名調(diào)用類方法
a.class_fun() # 對(duì)象名調(diào)用類方法
A.static_fun() # 類名調(diào)用靜態(tài)方法
a.static_fun() # 對(duì)象名調(diào)用靜態(tài)方法

類的特殊方法:

__init__(self):類的初始化方法(構(gòu)造方法),創(chuàng)建對(duì)象時(shí)調(diào)用
__def__(self):  類的析構(gòu)方法,釋放對(duì)象時(shí)調(diào)用。
__str__(self):打印,利用print輸出對(duì)象時(shí)輸出的信息,必須有字符串型的返回值,否則報(bào)錯(cuò)
__repr__(self):效果上和__str__相同,單調(diào)用的時(shí)機(jī)不同

新式類和經(jīng)典類(舊式類)

Python2中默認(rèn)繼承經(jīng)典類,新式類需要繼承自object
Python3中默認(rèn)繼承新式類
經(jīng)典類:
        ?在多繼承時(shí)采用MRO算法,深度優(yōu)先
        ?相同父類執(zhí)行多次構(gòu)造函數(shù)
新式類:
        ?在多繼承時(shí)采用C3算法廣度優(yōu)先
        ?相同父類執(zhí)行一次構(gòu)造函數(shù)
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI