類的基本概念及self是什麽東西?
阿新 • • 發佈:2018-03-15
fun 數據 ret 任務 相同 urn 包含 容器 屬性
#coding=utf-8 """ class 類 #對一類擁有相同屬性的對象的抽象、藍圖、原型,在類中定義了這些對象都具備的屬性、共同方法 object對象 一個對象就是一個類的實例化模型,一個類必須經過實例化後才能在程序中調用,一個類可以實例化多個對象 類的三大特性: 1、封裝 在類中對數據賦值。內部調用對外部用戶是透明的、裏面包含著類的數據和方法、類似一個膠囊或者容器 2、繼承 一個類可以派生出子類,在這個父類中定義的方法屬性可以被子類繼承 3、多態 例:老板讓所有員工開始工作,老板只需要說開始工作,而不需要對各類員工下達任務、類似財務部、行政部、技術部等、 即一個接口,多種實現。 編程的兩大原則: 1、寫重復代碼是非常不好的低級行為 2、寫的代碼需要經常變更 類的構造函數的初始化過程 首先一般函數的執行流程是: def funtion(x): x += 1 return x value = funtion(x) 調用過程是funtion函數運行之後返回一個值這個值會存到一個內存裏面,他的變量名(門牌號)是value 當寫好一個類模型後,這個類會存到一個內存中,先記為:內存1 內存1中包含的東西,初始化函數,初始化屬性,方法 在初始化類的實例的時候 即ri = role(name) 會在內存中開辟第二個內存空間,記為:內存2,裏面會存這個實例化的具體值,即r1的name.等屬性 即實例化的過程是為r1 = role.__init__(name),返回一個內存,事實上在類的實例化過程中內存2還會把r1存進去,即門牌號所以說實例化時候實際上需要這些參數 r1 = role(r1,name) 那麽既然多了一個參數,所有__init__函數裏面就需要加一個參數,即role.__init__(r1,name),內存2裏面存的屬性為ri.name 等 再說類方法,類方法放到哪一個內存裏面都不會改變方法裏面的東西,所以沒必要在內存2裏面也存進去方法,所以初始化的時候並沒有把類方法也存到實例的內存裏面, 那麽當實例需要調用這個方法時候,實際上就是r1.funtion1,而funtion沒在r1的內存裏面啊,所以必須要調用role.funtion,那麽調用role的funtion就必須要告訴funtion是哪個對象使用的我了 所以就是這樣調用的r1.funtion()=role.funtion1(r1),所以類的方法裏面就必需加一個參數了即funtion(self)這個self有什麽用比如 def funtion1(r1): print r1.name 如果沒有r1,那麽你怎麽得到r1.name呢? 而這個r1就是我們類裏面的self的由來""" class Role(): def __init__(self,name): #構造函數,在實例化時做一些初始化工作 self.name = name def funtion1(self): print self.name r1 = Role("zq") print id(r1) print id(r1.name) print id(Role)
類的基本概念及self是什麽東西?