1)class類包含:
類的屬性:類中所涉及的變量
類的方法:類中函數
2)_init_函數(方法)
1.首先說一下,帶有兩個下劃線開頭的函數是聲明該屬性為私有,不能在類地外部被使用或直接通路。
2.init函數(方法)支援帶參數的類的初始化 ,也可為聲明該類的屬性
3.init函數(方法)的第一個參數必須是 self(self為習慣用法,也可以用别的名字),後續參數則可 以自由指定,和定義函數沒有任何差別。
3)函數定義
Python程式設計中對于某些需要重複調用的程式,可以使用函數進行定義,基本形式為:
def 函數名(參數1, 參數2, ……, 參數N): 其代碼形式如下面所示:
注意在類的内部,使用def關鍵字可以為類定義一個函數(方法),與一般函數定義不同,類方法必須包含參數self,且為第一個參數!
此外,可使用 **kw定義關鍵參數,代表任意參數,python函數可變參數及關鍵字參數定義參考見下文。
python函數隻能先定義再調用!
4)self參數含義
在類的代碼(函數)中,需要通路目前的執行個體中的變量和函數的,即,通路Instance中的:
對應的變量(property):Instance.ProperyNam,去讀取之前的值和寫入新的值
調用對應函數(function):Instance.function(),即執行對應的動作
此處的Instance本身就是self。
Python中的self等價于C++中的self指針和Java、C#中的this參數。
5)一個簡單執行個體
5.1代碼如下
5.2運作結果
5.3執行個體解釋
在本例中建立一個person的類,并指派了兩個執行個體:xiaoming和xiaohong , self指的是傳入的執行個體(不同執行個體類的屬性值不同以及方法執行結果不同)即xiaoming和xiaohong,類的屬性即為name,gender,birth及其他kw,類的方法即為sayhi。有關關鍵字參數請參考python的可變參數和關鍵字參數(*args **kw)
建立類和對象
面向對象程式設計是一種程式設計方式,此程式設計方式的落地需要使用 “類” 和 “對象” 來實作,是以,面向對象程式設計其實就是對 “類” 和 “對象” 的使用。
類就是一個模闆,模闆裡可以包含多個函數,函數裡實作一些功能
對象則是根據模闆建立的執行個體,通過執行個體對象可以執行類中的函數

class是關鍵字,表示類
建立對象,類名稱後加括号即可
ps:類中的函數第一個參數必須是self(詳細見:類的三大特性之封裝)
類中定義的函數叫做 “方法”
# 建立類 class Foo: def Bar(self): print 'Bar' def Hello(self, name): print 'i am %s' %name # 根據類Foo建立對象obj obj = Foo() obj.Bar() #執行Bar方法 obj.Hello('wupeiqi') #執行Hello方法
诶,你在這裡是不是有疑問了?使用函數式程式設計和面向對象程式設計方式來執行一個“方法”時函數要比面向對象簡便。
面向對象:【建立對象】【通過對象執行方法】
函數程式設計:【執行函數】
觀察上述對比答案則是肯定的,然後并非絕對,場景的不同适合其的程式設計方式也不同。
總結:函數式的應用場景 –> 各個函數之間是獨立且無共用的資料。
面向對象三大特性
面向對象的三大特性是指:封裝、繼承和多态。
一、封裝
封裝,顧名思義就是将内容封裝到某個地方,以後再去調用被封裝在某處的内容。
是以,在使用面向對象的封裝特性時,需要:
将内容封裝到某處
從某處調用被封裝的内容
第一步:将内容封裝到某處
self 是一個形式參數,當執行 obj1 = Foo('wupeiqi', 18 ) 時,self 等于 obj1
當執行 obj2 = Foo('alex', 78 ) 時,self 等于 obj2
是以,内容其實被封裝到了對象 obj1 和 obj2 中,每個對象中都有 name 和 age 屬性,在記憶體裡類似于下圖來儲存。
第二步:從某處調用被封裝的内容
調用被封裝的内容時,有兩種情況:
通過對象直接調用
通過self間接調用
1、通過對象直接調用被封裝的内容
上圖展示了對象 obj1 和 obj2 在記憶體中儲存的方式,根據儲存格式可以如此調用被封裝的内容:對象.屬性名
def __init__(self, name, age): self.name = name self.age = age obj1 = Foo('wupeiqi', 18) print obj1.name # 直接調用obj1對象的name屬性 print obj1.age # 直接調用obj1對象的age屬性 obj2 = Foo('alex', 73) print obj2.name # 直接調用obj2對象的name屬性 print obj2.age # 直接調用obj2對象的age屬性
2、通過self間接調用被封裝的内容
執行類中的方法時,需要通過self間接調用被封裝的内容
def detail(self): print self.name print self.age obj1.detail() # Python預設會将obj1傳給self參數,即:obj1.detail(obj1),是以,此時方法内部的 self = obj1,即:self.name 是 wupeiqi ;self.age 是 18 obj2.detail() # Python預設會将obj2傳給self參數,即:obj1.detail(obj2),是以,此時方法内部的 self = obj2,即:self.name 是 alex ; self.age 是 78
綜上所述,對于面向對象的封裝來說,其實就是使用構造方法将内容封裝到 對象 中,然後通過對象直接或者self間接擷取被封裝的内容。
本文出自http://blog.csdn.net/ly_ysys629/article/details/54893185