課程導讀 原生的ajax雖然在實際開發中很少編寫,但如果想將js高級框架底層學明白,那ajax的原理是必須要求精通的。 本套ajax視頻對ajax底層實現原理講解非常透徹,對ajax發送非同步請求的每一步都進行了透徹的分析,讓你徹底搞懂搞透ajax。 課程主要涵蓋的內容: ajax底層實現原理剖析、 ...
-
對象獨有的功能
-
動靜態方法
-
面向對象三大特性之繼承
-
繼承的本質
-
繼承後名字的查找順序
-
1.對象獨有的功能:
class Person: h_type = '人類' def __init__(self, name): # 讓對象擁有獨有的數據 self.name = name # 定義在類中的函數 我們稱之為方法 def eat(self): # 是多個對象公共的方法 也算多個對象獨有的方法 對象來調用就會將對象當做第一個參數傳入 print('%s正在乾飯'%self.name) def others(self,a,b): print('others哈哈哈') ''' 針對對象獨有的方法 我們無法真正實現 1.如果在全局則不是獨有的 2.如果在類中則是公共的 python解釋器針對上述問題添加了一個非常牛的特性 定義在類中的函數預設是綁定給對象的(相當於是對象獨有的方法) ''' # p1 = Person('jason') # p1.eat() # eat(p1) # p2 = Person('kevin') # p2.eat() # eat(p2) # 如何理解綁定二字 # p3 = Person('oscar') # Person.eat(p3) p1 = Person('jason') p1.others(1, 2) Person.others(p1,1,2)
2.動靜態方法
專門針對在類體代碼中編寫的函數
2-1.綁定給對象的方法
(1)直接在類體代碼中編寫即可
(2)對象調用會自動將對象當做第一個參數傳入
(3)類調用則有幾個形參就傳幾個實參
2-2.綁定給類的方法
2-3.靜態方法(普普通通的函數)
class Student: school = '清華大學' # 綁定給對象的方法 def run(self): # self用於接收對象 print('老六趕緊跑!!!', self) @classmethod # 綁定給類的方法 def eat(cls): # cls用於接收類 print('老六你可真有才', cls) @staticmethod # 靜態方法 def sleep(a, b): # 無論誰來調用都必須按照普普通通的函數傳參方式 print('老六快去睡覺吧') stu1 = Student() # 調用綁定給類的方法 # Student.eat() # 類調用會自動將類當做第一個參數傳入 eat(Student) # stu1.eat() # 對象調用會自動將產生該對象的類當做第一個參數傳入 eat(Student) # 調用靜態方法 # Student.sleep(1,2) stu1.sleep(1, 2)
3.
面向對象三大特性分別是:繼承,封裝,多態
3-1.繼承的含義
在現實生活中繼承其實就是用來描述人與人之間資源的關係
eg:兒子繼承父親的財產(擁有了父親所有的資源)
在編程世界里繼承其實就是用來描述類與類之間數據的關係
eg:類A繼承類B(擁有了類B裡面所有的數據和功能)
3-2.繼承的目的
現實生活中繼承就是可以擁有別人的財產
eg:親身父親 乾爹 乾媽 富婆
編程世界里繼承就是為了節省代碼編寫
eg:可以繼承一個類 也可以繼承多個類
3-3.繼承的操作
class 類名(類名): pass class MyClass(F1,F2,F3): pass """ 我們將被繼承的類稱之為: 父類或基類或超類 我們將繼承類的類稱之為: 子類或派生類 ps:平時最常用的就是父類和子類 """
(1).定義類的時候在類名後加括弧
(2).括弧內填寫你需要繼承的類名
(3).括弧內可以填寫多個父類 逗號隔開即可
4.繼承的本質
抽象點說將多個類共同的數據或功能抽取出來形成一個基類,本質上就是從上往下獲得各個基類裡面的資源
對象:數據和功能的結合體
類:多個對象相同的數據和功能的結合體
父類:多個類相同的數據和功能的結合體
ps:類和父類最主要的功能其實就是節省代碼
5.繼承後名字的查找順序
5-1:在不繼承的情況下名字的查找順序先從對象自身查找 沒有的話 再去產生該對象的類中查找
class Student: school = '清華大學' def choice_course(self): print('正在選課') stu1 = Student() print(stu1.school) # 對象查找school 自身名稱空間沒有 所以查找的是類的 清華大學 stu1.school = '北京大學' # 在自身的名稱空間中產生了新的school """對象點名字並寫了賦值符號和數據值 那麼操作的肯定是自己的名稱空間""" print(stu1.school) # 北京大學 print(Student.school) # 清華大學
5-2:單繼承的情況下名字的查找順序先從對象自身查找 然後是產生該對象的類 然後是一個個父類
5-3:多繼承的情況下名字的查找順序
(1)非菱形繼承(最後不會歸總到一個我們自定義類上)
深度優先(每個分支都走到底 再切換)
(2)菱形繼承(最後歸總到一個我們自定義類上)
廣度優先(前面幾個分支都不會走最後一個類 最後一個分支才會走)
也可以使用類點mro()方法查看該類產生的對象名字的查找順序
主要涉及到對象查找名字 那麼順序幾乎都是:對象自身 類 父類
6.
經典類 不繼承object或其子類的類(什麼都不繼承) 新式類 繼承了object或其子類的類 """ 在python3中所有的類預設都會繼承object 也就意味著python3裡面只有新式類 在python2中有經典類和新式類 由於經典類沒有核心的功能 所以到了python3直接砍掉了 以後我們在定義類的時候 如果沒有想要繼承的父類 一般推薦以下寫法 class MyClass(object): pass 目的是為了相容python2 """ 以後寫代碼針對object無需關心 知道它的存在即可