-
物件獨有的功能
-
動靜態方法
-
面向物件三大特性之繼承
-
繼承的本質
-
繼承后名字的查找順序
-
經典類與新式類
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無需關心 知道它的存在即可
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/500387.html
標籤:Python
