Day-14 初識面向物件
阿新 • • 發佈:2018-11-06
一、面向物件和麵向過程
1.面向過程:一切以事物的流程為核心,核心是“過程”二字(流水線),是一種機械式的程式設計思維
優點:負責的問題流程化,編寫相對簡單
缺點:可擴充套件性差
2.面向物件:一切以物件為中心
優點:可擴充套件性強
缺點:程式設計的複雜度高於面向過程
萬事萬物皆為物件
二、面向物件如何編寫
使用類可以建立物件:
class 類名(object):
def __init__(self, name, age): # 構造方法. 建立物件的時候自動呼叫這個方法
self.name = name
self.age = age
def 方法名(self, 引數):
方法體(return)
建立物件:
變數(引用, 控制代碼) = 類名(引數)
# 訪問物件的屬性資訊
物件.屬性
# 方法的訪問:
物件.方法()
class Car: def __init__(self, color, pai, pailiang): # self表示當前類的物件. 當前你建立的是誰, 誰來訪問的這個方法.那這個self就是誰. self.color = color self.pai = pai self.pailiang= pailiang def run(self, speed): print("⻋可以跑%s邁" % speed) c = Car("red", "京A66666", "2.0T") c.run(100) # 這時. python會自動把物件c傳遞給run方法的第一個引數位置.
總結: 類與物件的關係: 類是對事物的總結. 抽象的概念. 類用來描述物件. 物件是類的例項
化的結果. 物件能執行哪些方法. 都由類來決定. 類中定義了什麼. 物件就擁有什麼
對比面向物件和麵向過程:
看需求
大型專案更適合用面向物件
小型指令碼程式更適合面向過程
三、面向物件的三大特徵
面向物件三大特徵:封裝,繼承,多型,只要是面向物件程式語言,都有這三個特徵
1.封裝
對屬性封裝:self.xxx = xxxx
對方法封裝
2.繼承
子類可以自動擁有父親中除了私有內容外的其他所有內容
class Yao: def chi(self): print("我是妖怪, 我天生就會吃人") class BaiGuJing(Yao): # 白骨精繼承妖怪 pass bgj = BaiGuJing() bgj.chi() # 我是妖怪, 我天生就會吃人 # 雖然白骨精類中沒有編寫chi. 但是他爹有啊. 直接拿來用
多繼承
class QinDie: def chi(self): print("親爹給你好吃的") def play(self): print("親爹會陪你玩") class GanDie: def qian(self): print("乾爹給錢啊") def play(self): print("乾爹會陪你玩") class GuNiang(QinDie, GanDie): pass bumei = GuNiang() bumei.chi() # 親爹 bumei.qian() # 親爹沒有, 找乾爹 bumei.play() # 親爹有了, 就不找乾爹了
3.多型
同一個物件對重形態
class Animal: def chi(self): print("動物就知道吃") class Pig(Animal): def chi(self): print("豬在吃") class Haski(Animal): def chi(self): print("哈士奇在吃") class Alasika(Animal): def chi(self): print("阿拉斯加在吃") class SiYangYuan: def yanng_animal(self, ani): ani.chi() zhu = Pig() erha = Haski() ala = Alasika() alex = SiYangYuan() alex.yanng_animal(zhu) alex.yanng_animal(erha) alex.yanng_animal(ala)