面向對象 1.初始面向對象 面向過程: 一切以事務的發展流程為中心. 面向對象: 一切以對象為中心. 一切皆為對象. 具體的某一個事務就是對象 打比方: 面向過程 大象進冰箱 步驟: 第一步, 開門, 第二步, 裝大象, 第三步, 關門 面向對象: 大象, 你進冰箱. 此時主語是大象. 我操縱的是大 ...
面向對象
1.初始面向對象
面向過程:
一切以事務的發展流程為中心.
面向對象:
一切以對象為中心. 一切皆為對象. 具體的某一個事務就是對象
打比方:
面向過程
大象進冰箱
步驟: 第一步, 開門, 第二步, 裝大象, 第三步, 關門
面向對象:
大象, 你進冰箱.
此時主語是大象. 我操縱的是大象. 此時的大象就是對象
2. 類和對象
類: 就是圖紙. 創建對象的第一步. 先畫圖紙. 先寫類.
對象: 對象就是車. 通過圖紙造出來的具體的東西. 通過類來創建對象
類與對象的關係:
類是對xxx事物的歸類.
def __init__(self, 參數) 參數一般作為屬性設置給對象. 對象就是self, 對屬性的封裝.
pass
def 方法(self, 參數): 方法. 第一個參數一般是固定的self. 當前類的對象.
pass
對象是xx類型的一個具體
創建對象: 類名()
創建類:
class 類名:
def __init__(self): # 初始化方法. 又被成為構造方法
self.屬性 = 值
def fangfa(self):
方法體(函數體, return)
創建對象:
變數 = 類名() # 實例化 <-> 創建對象
變數.屬性 # 訪問對象的屬性信息
變數.方法() # 訪問類中的方法
class HeShang: def __init__(self, fh, name, miao): self.fahao = fh self.name = name self.miao = miao def nianjing(self): print("和尚會念經") def huayuan(self): print("和尚會化緣") lzs = HeShang("花和尚", "魯智深", "梁山水廟") lzs.nianjing() lzs.huayuan()
3. 面向對象和麵向過程的對比
如果寫一些比較小的程式用面向過程.
程式很複雜. 很龐大建議用面向對象.
4. 面向對象的三大特征
封裝:
1. 對屬性的封裝(__init__())
self.xxx = xxx
2. 對方法和功能的封裝
class Student: def __init__(self, num, name, clazz): self.num = num self.name = name self.clazz = clazz stu = Student("10010", "曹寶寶", "三年二班") stu2 = Student("10086", "王迪", "三年一班") def teach(s): print("教他%s語文課" % (s.name)) teach(stu) teach(stu2)
繼承
子類自動擁有父類中除了私有內容外的其他所有內容
class Bar(Foo): Bar對Foo進行了擴展
pass
當出現x是一種y的時候. 推薦使用繼承關係
python支持多繼承. 查找順序: 先找離他近的.
class Base1: def f1(self): print("base1.1") def f2(self): print("base1.f2") def f3(self): print("base2.f3") self.f1() class Base2: def f1(self): print("base2.f1") class Foo(Base1,Base2): def f0(self): print("foo.f0") self.f3() obj = Foo() obj.f0()
多態 (python原生直接就是多態)
python更多的支持的是鴨子模型,只要會叫就可以
class Animal: def chi(self): print("會吃") class GoldenMonkey(Animal): def chi(self): print("用手拿著吃, 五花八門") class Tiger(Animal): def chi(self): print("老虎吃肉") class Elephant(Animal): def chi(self): print("大象吃香蕉") def wei_animal(ani): ani.chi() t = Tiger() m = GoldenMonkey() e = Elephant() wei_animal(t) wei_animal(m) wei_animal(e)