收錄于話題
#Python入門
27個

概要:
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)#狗也知道吃