python物件導向基礎

2021-07-22 10:14:34 字數 1601 閱讀 4395

類是例項的模版,例項是根據類建立的乙個具體物件,每個物件都有相同的方法,但是各自的資料不同。

如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線__,在python中,例項的變數名如果以__開頭,就變成了乙個私有變數(private),只有內部可以訪問,外部不能訪問

當子類和父類都存在相同的run()方法時,我們說,子類的run()覆蓋了父類的run(),在**執行的時候,總是會呼叫子類的run()。這樣,我們就獲得了繼承的另乙個好處:多型。

態語言的「鴨子型別」,它並不要求嚴格的繼承體系,乙個物件只要「看起來像鴨子,走起路來像鴨子」,那它就可以被看做是鴨子。

但是,如果我們想要限制例項的屬性怎麼辦?比如,只允許對student例項新增nameage屬性。

為了達到限制的目的,python允許在定義class的時候,定義乙個特殊的__slots__變數,來限制該class例項能新增的屬性:

class

student

(object):

__slots__ = ('name', 'age') # 用tuple定義允許繫結的屬性名稱

python內建的@property裝飾器就是負責把乙個方法變成屬性呼叫的:

class

student

(object):

@property

defscore

(self):

return self._score

如果乙個類想被用於for ... in迴圈,類似list或tuple那樣,就必須實現乙個__iter__()方法,該方法返回乙個迭代物件,然後,python的for迴圈就會不斷呼叫該迭代物件的__next__()方法拿到迴圈的下乙個值,直到遇到stopiteration錯誤時退出迴圈。

我們以斐波那契數列為例,寫乙個fib類,可以作用於for迴圈:

class

fib(object):

def__init__

(self):

self.a, self.b = 0, 1

# 初始化兩個計數器a,b

def__iter__

(self):

return self # 例項本身就是迭代物件,故返回自己

def__next__

(self):

self.a, self.b = self.b, self.a + self.b # 計算下乙個值

if self.a > 100000: # 退出迴圈的條件

raise stopiteration();

return self.a # 返回下乙個值

動態語言和靜態語言最大的不同,就是函式和類的定義,不是編譯時定義的,而是執行時動態建立的。

python物件導向基礎 python物件導向基礎

面向過程與物件導向 面向過程的程式設計的核心是過程 流水線式思維 過程即解決問題的步驟,面向過程的設計就好比精心設計好的一條流水線,考慮周全什麼時候處理什麼東西。優點 極大降低了寫程式的複雜度,只需要順著要執行的步驟,堆疊 即可。缺點 一套流水線或者流程就是解決乙個問題,牽一髮而動全身。應用場景 一...

Python之物件導向 物件導向基礎

一 面向過程 物件導向對比 1 面向過程 根據業務邏輯從上到下寫壘 2 函式式思想 將某功能 封裝到函式中,日後便無需重複編寫,僅呼叫函式即可 3 物件導向 對函式進行分類和封裝 1 2 3一步一步抽象,函式式是走向物件導向的中間步驟 函式式的應用場景 各個函式之間是獨立且無共用的資料 物件導向程式...

python 物件導向基礎

usr bin env python coding utf 8 類的簡單測試 class person object 這是類的文件 建構函式,python中物件的屬性值動態新增 python 不不支援函式過載 def init self,name,id self.name name 例項變數 sel...