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