類是例項的模版,例項是根據類建立的乙個具體物件,每個物件都有相同的方法,但是各自的資料不同。
如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線__
,在python中,例項的變數名如果以__
開頭,就變成了乙個私有變數(private),只有內部可以訪問,外部不能訪問
當子類和父類都存在相同的run()
方法時,我們說,子類的run()
覆蓋了父類的run()
,在**執行的時候,總是會呼叫子類的run()
。這樣,我們就獲得了繼承的另乙個好處:多型。
態語言的「鴨子型別」,它並不要求嚴格的繼承體系,乙個物件只要「看起來像鴨子,走起路來像鴨子」,那它就可以被看做是鴨子。
但是,如果我們想要限制例項的屬性怎麼辦?比如,只允許對student例項新增name
和age
屬性。
為了達到限制的目的,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...