1. 程式人生 > >python 面向對象一 OOP

python 面向對象一 OOP

順序 ram ict core def 表示 創建 自然 簡化

一、面向對象和面相過程

面向對象編程——Object Oriented Programming,簡稱OOP,是一種程序設計思想。OOP把對象作為程序的基本單元,一個對象包含了數據和操作數據的函數。

面向過程的程序設計把計算機程序視為一系列的命令集合,即一組函數的順序執行。為了簡化程序設計,面向過程把函數繼續切分為子函數,即把大塊函數通過切割成小塊函數來降低系統的復雜度。

而面向對象的程序設計把計算機程序視為一組對象的集合,而每個對象都可以接收其他對象發過來的消息,並處理這些消息,計算機程序的執行就是一系列消息在各個對象之間傳遞。

在Python中,所有數據類型都可以視為對象,當然也可以自定義對象。自定義的對象數據類型就是面向對象中的類(Class)的概念。

我們以一個例子來說明面向過程和面向對象在程序流程上的不同之處。

假設我們要處理學生的成績表,面向過程的程序表示一個學生成績可以用一個dict表示,處理學生成績用函數表示:

1 >>> std1 = {name: Mich, score: 100}
2 >>> std2 = {name: Jack, score: 50}
3 >>> def print_score(std):
4 ...     print(%s:%s % (std[name], std[score]))
5 ... 
6 >>> print_score(std1)
7 Mich:100 8 >>> print_score(std2) 9 Jack:50

如果采用面向對象的程序設計思想,我們首選思考的不是程序的執行流程,而是Student這種數據類型應該被視為一個對象,這個對象擁有namescore這兩個屬性(Property)。如果要打印一個學生的成績,首先必須創建出這個學生對應的對象,然後,給對象發一個print_score消息,讓對象自己把自己的數據打印出來。

 1 >>> class Student(object):
 2 ...     def __init__(self, name, score):
 3 ...         self.name = name
4 ... self.score = score 5 ... def print_score(self): 6 ... print(%s:%s % (self.name, self.score)) 7 ... 8 >>> st1 = Student(Mich, 100) 9 >>> st2 = Student(Jack, 100) 10 >>> st1.print_score() 11 Mich:100 12 >>> st2.print_score() 13 Jack:100

面向對象的設計思想是從自然界中來的,因為在自然界中,類(Class)和實例(Instance)的概念是很自然的。Class是一種抽象概念,比如我們定義的Class——Student,是指學生這個概念,而實例(Instance)則是一個個具體的Student,比如,st1和st2是兩個具體的Student。

所以,面向對象的設計思想是抽象出Class,根據Class創建Instance。

面向對象的抽象程度又比函數要高,因為一個Class既包含數據,又包含操作數據的方法。

面向對象三大特性:封裝,繼承,多態

python 面向對象一 OOP