面向?qū)ο缶幊?/strong>
面向?qū)ο缶幊?mdash;—Object Oriented PRogramming,簡稱OOP,是一種程序設(shè)計思想。OOP把對象作為程序的基本單元,一個對象包含了數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)。
面向過程的程序設(shè)計把計算機程序視為一系列的命令集合,即一組函數(shù)的順序執(zhí)行。為了簡化程序設(shè)計,面向過程把函數(shù)繼續(xù)切分為子函數(shù),即把大塊函數(shù)通過切割成小塊函數(shù)來降低系統(tǒng)的復雜度。
而面向?qū)ο蟮某绦蛟O(shè)計把計算機程序視為一組對象的集合,而每個對象都可以接收其他對象發(fā)過來的消息,并處理這些消息,計算機程序的執(zhí)行就是一系列消息在各個對象之間傳遞。
在Python中,所有數(shù)據(jù)類型都可以視為對象,當然也可以自定義對象。自定義的對象數(shù)據(jù)類型就是面向?qū)ο笾械念悾–lass)的概念。
類是抽象的模板,比如Student類,而實例是根據(jù)類創(chuàng)建出來的一個個具體的“對象”,每個對象都擁有相同的方法,但各自的數(shù)據(jù)可能不同。
定義類是通過class關(guān)鍵字
class Student(object):# 定義類是通過class關(guān)鍵字
pass
>>> bart = Student()
>>> bart
<__main__.Student object at 0x10a67a590>
>>> Student
<class '__main__.Student'>
>>>class Student(object):
def__init__(self, name, score):
self.name = name
self.score = score
和普通的函數(shù)相比,在類中定義的函數(shù)只有一點不同,就是第一個參數(shù)永遠是實例變量self,并且,調(diào)用時,不用傳遞該參數(shù)。
>>> defprint_score(std):
... print'%s: %s' % (std.name, std.score)
...
>>> print_score(bart)
Bart Simpson: 59
classStudent(object):
def__init__(self, name, score):
self.name = name
self.score = score
defprint_score(self):
print'%s: %s' % (self.name, self.score)
類是創(chuàng)建實例的模板,而實例則是一個一個具體的對象,各個實例擁有的數(shù)據(jù)都互相獨立,互不影響;
方法就是與實例綁定的函數(shù),和普通函數(shù)不同,方法可以直接訪問實例的數(shù)據(jù);
通過在實例上調(diào)用方法,我們就直接操作了對象內(nèi)部的數(shù)據(jù),但無需知道方法內(nèi)部的實現(xiàn)細節(jié)。
和靜態(tài)語言不同,Python允許對實例變量綁定任何數(shù)據(jù),也就是說,對于兩個實例變量,雖然它們都是同一個類的不同實例,但擁有的變量名稱都可能不同
在Class內(nèi)部,可以有屬性和方法,而外部代碼可以通過直接調(diào)用實例變量的方法來操作數(shù)據(jù),這樣,就隱藏了內(nèi)部的復雜邏輯。如果要讓內(nèi)部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線__,在Python中,實例的變量名如果以__開頭,就變成了一個私有變量(private),只有內(nèi)部可以訪問,外部不能訪問
classStudent(object):
def__init__(self, name, score):
self.__name = name
self.__score = score
defprint_score(self):
print'%s: %s' % (self.__name, self.__score)

新聞熱點
疑難解答