1、面向過程編程 核心是"過程"二字,過程指的是解決問題的步驟,即先干什么再干什么 基于該思想編寫程序就好比在編寫一條流水線,是一種機(jī)械式的思維方式
優(yōu)點(diǎn):復(fù)雜的問題流程化、進(jìn)而簡單化 缺點(diǎn):可擴(kuò)展性差
2、面向?qū)ο?br/> 核心"對(duì)象"二字,對(duì)象指的是特征與技能的結(jié)合體, 基于該思想編寫程序就好比在創(chuàng)造一個(gè)世界,你就是這個(gè)世界的上帝,是一種 上帝式的思維方式
優(yōu)點(diǎn):可擴(kuò)展性強(qiáng) 缺點(diǎn):編程的復(fù)雜度高于面向過程 重點(diǎn):面向?qū)ο蟮暮诵捏w現(xiàn)是將數(shù)據(jù)和處理數(shù)據(jù)的程序封裝到對(duì)象中 '''
# 函數(shù)與方法:都是解決問題的功能 # 函數(shù):通過函數(shù)名直接調(diào)用 # 方法:通過附屬者.語法來調(diào)用
# 變量:通過變量名訪問變量值 # 屬性:通過附屬者.語法來訪問變量值 名稱空間操作# 所有能產(chǎn)生名稱空間對(duì)應(yīng)的對(duì)象(存放地址的變量)有__dict__值
# __dict__指向的就是附屬對(duì)象的名稱空間 import re print(re.__dict__)
re.__dict__['name'] = 're模塊' print(re.__dict__['name'])
re.__dict__['action'] = lambda x: x print(re.__dict__['action'](1000))
def fn(): pass print(fn.__dict__)
fn.name = 'fn函數(shù)' print(fn.name)
def test(): print("可以成為fn功能的函數(shù)") fn.action = test fn.action() 類與對(duì)象的概念# 類:具有相同特征與行為個(gè)體集合的抽象 # 對(duì)象:有特征、行為的具體個(gè)體。就是類的具體體現(xiàn)
# 區(qū)別:兩個(gè)人同時(shí)思考一個(gè)名字,想到的一定是同一個(gè)物體,就一定是對(duì)象,反之一定是類 語法# 類的聲明: ''' class 類名: # class定義類語法的關(guān)鍵字 pass '''
# 對(duì)象的產(chǎn)生: 對(duì)象的實(shí)例化 ''' 對(duì)象1 = 類名() 對(duì)象2 = 類名() 對(duì)象3 = 類名() '''
# 類與對(duì)象都有自己獨(dú)立的名稱空間,每一個(gè)被實(shí)例化出來的對(duì)象,名稱空間也是各自獨(dú)立 # 所以類與對(duì)象都能額外添加 屬性(變量) 和 方法(函數(shù))
# 重點(diǎn):類一旦被加載(隨著所屬文件的加載就加載),就會(huì)進(jìn)入類的內(nèi)部執(zhí)行類中的所有代碼 對(duì)象查找屬性的順序class People: # 類自帶(不同在外界額外添加)的屬性與方法 identify = '人類' def sleep(self): print('睡覺') p1 = People() p2 = People() p1.identify = '新人類' print(p1.identify) # 訪問自己的 p1.__dict__.clear() # 刪除自己的后 print(p1.identify) # 訪問類的 print(p2.identify) # p2沒有自己的,訪問類的 # 重點(diǎn):屬性的訪問順序:優(yōu)先加載自身的名字,如果沒有再考慮類的 對(duì)象獨(dú)有的名稱空間: 在產(chǎn)生對(duì)象時(shí)就賦初值class Student: def __init__(self, stu_name, sex): self.name = stu_name self.sex = sex # 通常建議參數(shù)名與新增的屬性名同名
stu = Student('Bob', 'male') # 實(shí)例化對(duì)象 print(stu.name, stu.sex)
''' # __init__方法會(huì)在實(shí)例化對(duì)象時(shí)被調(diào)用 # 1.會(huì)為實(shí)例化的對(duì)象形成空的名稱空間 # 2.就是一個(gè)方法,可以被傳參,在 類名(實(shí)參) 這種方式下調(diào)用并傳參 __init__(self, 形參) # 3.第一個(gè)self就是要產(chǎn)生的當(dāng)前對(duì)象 # 重點(diǎn):在方法內(nèi)部,形參拿到了實(shí)參值,利用self.屬性名 = 形參 = 實(shí)參值,對(duì)對(duì)象的名稱空間添加屬性 ''' 類中方法的第一個(gè)默認(rèn)參數(shù):對(duì)象方法class A: # 對(duì)象方法 def test(self, num): pass a = A()
# 調(diào)用方法 # 二級(jí)優(yōu)化 a.test(10) # 一級(jí)優(yōu)化 A.test(a, 10) # 實(shí)現(xiàn)原理 A.__dict__['test'](a, 10)
# 總結(jié):對(duì)象a傳遞給self,數(shù)字10傳遞給num # 重點(diǎn):方法的第一個(gè)參數(shù)一定是調(diào)用該方法的對(duì)象 類中@classmethod修飾的方法:類方法class Tool: @classmethod def add(cls, n1, n2): # 統(tǒng)一類與對(duì)象都可以調(diào)用類方法,一定有默認(rèn)傳入第一個(gè)參數(shù) return n1 n2 # 建議 Tool.add(10, 20) # 默認(rèn)第一個(gè)傳入自身 - Tool
# 不建議 tool = Tool() tool.add(100, 200) # 默認(rèn)第一個(gè)傳入自身所屬類 - tool.__class__ 來源:https://www./content-4-306001.html
|