天天看點

python類class中_init_函數以及參數self的簡單解釋

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)

建立類和對象

面向對象程式設計是一種程式設計方式,此程式設計方式的落地需要使用 “類” 和 “對象” 來實作,是以,面向對象程式設計其實就是對 “類” 和 “對象” 的使用。

類就是一個模闆,模闆裡可以包含多個函數,函數裡實作一些功能

對象則是根據模闆建立的執行個體,通過執行個體對象可以執行類中的函數

python類class中_init_函數以及參數self的簡單解釋

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方法

诶,你在這裡是不是有疑問了?使用函數式程式設計和面向對象程式設計方式來執行一個“方法”時函數要比面向對象簡便。

面向對象:【建立對象】【通過對象執行方法】

函數程式設計:【執行函數】

觀察上述對比答案則是肯定的,然後并非絕對,場景的不同适合其的程式設計方式也不同。

總結:函數式的應用場景 –> 各個函數之間是獨立且無共用的資料。

面向對象三大特性

面向對象的三大特性是指:封裝、繼承和多态。

一、封裝

封裝,顧名思義就是将内容封裝到某個地方,以後再去調用被封裝在某處的内容。

是以,在使用面向對象的封裝特性時,需要:

将内容封裝到某處

從某處調用被封裝的内容

第一步:将内容封裝到某處

python類class中_init_函數以及參數self的簡單解釋

self 是一個形式參數,當執行 obj1 = Foo('wupeiqi', 18 ) 時,self 等于 obj1

                              當執行 obj2 = Foo('alex', 78 ) 時,self 等于 obj2

是以,内容其實被封裝到了對象 obj1 和 obj2 中,每個對象中都有 name 和 age 屬性,在記憶體裡類似于下圖來儲存。

python類class中_init_函數以及參數self的簡單解釋

第二步:從某處調用被封裝的内容

調用被封裝的内容時,有兩種情況:

通過對象直接調用

通過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