1. 程式人生 > >Day-14 初識面向物件

Day-14 初識面向物件

一、面向物件和麵向過程

  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)