天天看點

Python之初始面向對象

收錄于話題

#Python入門

27個

Python之初始面向對象

概要:

1.面向對象和面向過程;2.面向對象如何編寫;3面向對象和面向過程對比;4.面向對象三大特征

一.面向對象和面向過程:

1.面向過程.,一切以事物的流程為核心,重點在"過程",按照實物的發展流程.,之前的函數或者非函數

優點:簡單.流水線式工作

缺點:可擴充性差

2.面向對象.一切以對象為中心,,萬事萬物皆為對象,(None除外),重點在"對象"的屬性和動作.

對象:是一個抽象的概念,具有相同屬性和和動作的結合體叫對象

優點:擴充性強(多态,以不同的角度來看)

缺點:編寫相對比較複雜.并且上手比較難.

例子1:要把大象裝冰箱, 總共分幾步? 三步. 第一步. 打開冰箱, 第二步. 裝大象, 第三步,關冰箱. 這是一個典型的面向過程的思維方式. 來我們如果換成面向對象呢? 很簡單.想 辦法造一個會鑽冰箱的大象就可以了. 然後指令大象. 進冰箱.大象就乖乖的進冰箱了,具體大象如何進的冰箱由大象來完成.,類似于上帝式的思維),這就是面向對象思維. 我們面向的不再是事物發展的流程, 而是操縱某一個事物的個體. 具體的某一個事物.

總結:面向對象和面向過程各有千秋,各有各的好處.

二.面向對象如何編寫.

在代碼中定義一個類,就相當于畫圖紙.

1.文法:

class 類名:   #類是對對象的描述,統稱,限制.

pass

2.建立對象:

類名()     #對象是通過類建立的

3.構造方法:

在python中我們可以是用__init__(self) 函數給對象進行初始化操作. 這個函數(方法)被稱為構造函數(方法);

def __init__(self,參數1,參數2,參數3)

#屬性的綁定

self.屬性1=參數1

self.屬性2=參數2

self.屬性3= 參數3 #.即'的'的意思

構造方法是建立對象的時候自動調用的

4.方法(寫在類中的函數,多個self)

在面向對象程式設計中的函數和一般函數不一樣,有self,多了一個參數,此時不應改叫函數,應該叫方法.

def method(self):

self: 目前正在執行的對象

對象.method()

5.例子:

class Car:

   #__init__構造方法,類似于預設值

   def __init__(self,color,paizi,pailiang,own):#self表示目前類的對象,目前你建立的是誰,誰來通路這個方法,這個self就是誰

       self.color=color

       self.paizi = paizi

       self.pailiang = pailiang

       self.own = own

       #print(self)#<__main__.Car object at 0x00000000024CD978>

   def run(self,speed):

       print("排量為%s的%s的車以%s的速度在飛馳" %(self.pailiang,self.color,speed))#此時的speed不要加self

   def tiaogao(self):

       print("車牌為%s的車在跳高" %(self.paizi))

car1=Car("紅色","冀A12345","2.0T","ALEX")#自動調用__init__方法

#print(type(car1))#<class '__main__.Car'>

#print(car1) #<__main__.Car object at 0x00000000024CD978> 和上面的self結果一緻,因為是同一個對象

car1.run(90) #排量為2.0T的紅色的車以90的速度在飛馳

car1.color = "黃色"

car1.run(90) #排量為2.0T的黃色的車以90的速度在飛馳

car1.tiaogao()#車牌為冀A12345的車在跳高

car2=Car("黑色","冀A67890","1.5L","Wusir")

car2.run(50) #排量為1.5L的黑色的車以50的速度在飛馳

類與對象的關系: 類是對事物的總結.抽象的概念.類用來描述對象,對象是類的執行個體化的結果. 對象能執行哪些方法都由類來決定,類中定義了什麼,對象就擁有什麼.

三.面向對象和面向過程的對比(代碼.思想)

面向對象和面向過程到底哪個好? 具體問題具體分析,沒有絕對的好和不好,這一點要格外注意.

四.面向對象的三個特征:

封裝.繼承.多态

1.封裝:把具有相同屬性和功能的内容封裝在一個對象中.

2.繼承:子類可以自動擁有父類中除了私有屬性外的其他所有内容.

在python中實作繼承非常簡單,在聲明類的時候,在類名後面添加一個小括号, 就可以完成繼承關系,這樣寫的好處是我們可以避免寫很多重複的功能和代碼;一個子類可以繼承多個父類,是有順序的,看例子.

例子:

class QinDie:

   def chi(self):

       print("親爹給你買吃的")

   def play(self):

       print("親爹陪你玩")

class GanDie:

   def le(self):

       print("幹爹讓你樂呵呵")

       print("幹爹給你買吃的")

class GuNiang(QinDie,GanDie): #誰在前,先繼承誰的,反過來的話,就先繼承幹爹的了

   def he(self):

       print("沒有人陪我,自己喝酒")

   # def chi(self):

   #     print("沒人陪我,自己吃肉")  #假如自己有父類的函數,執行自己的

gubumei =GuNiang()

gubumei.chi() #繼承親爹的,結果為親爹給你買吃的

gubumei.le()#親爹沒有,繼承幹爹的,結果為幹爹讓你樂呵呵

3.多态:同一個對象.可以擁有多種形态. python原生自帶多态性.

程式具有程式具有超高的可擴充性.面向對象思想的核心與靈魂.

class Animal:

       print("動物都知道吃")

class Pig(Animal):

       print("豬也知道吃")

class Dog(Animal):

       print("狗也知道吃")

class Cat(Animal):

       print("貓也知道吃")

class SiYangYuan:

   def Yang_animal(self,ani):#多态性,超強的可擴充性,無論傳遞進來的是什麼,都統一當做動物來對待

       ani.chi()

cat = Cat()

dog=Dog()

alex = SiYangYuan()

alex.Yang_animal(cat) #貓也知道吃态

alex.Yang_animal(dog)#狗也知道吃