物件導向
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)