1.類的定義 定義是用過class關鍵字 class Student(object): pass class 後面緊接着是類名,即Student,類名一般是大寫開頭的單詞, 緊接着是(object),表示該類是從哪一個類繼承下來的。若是沒有合適 的繼承類,就使用object類,這個是全部類最終都會繼承的類。 定義好了Student類,就能夠根據Student類建立出Student的實例, 建立實例是經過類名+()實現的 res = Student() print(res)#<__main__.Student object at 0x1035d35c0> print(Student)#<class '__main__.Student'> 能夠看到,res指向的是一個Student實例,而Student本省則是一個類。 能夠自由的給實例變量綁定屬性,eg. 給res綁定一個name屬性 res.name = 'Jake' print(res.name)#Jake 因爲類能夠起到模板的做用,所以,能夠在建立實例的時候,把一些咱們 認爲必須綁定的屬性強制填寫進去,經過定義一個特殊的__init__方法 在建立實例的時候,把name,age,sex等屬性綁定上去。 def __init__(self, name, age, sex): self.name = name self.age = age self.sex =sex 注:__init__是雙下劃線 注意: __init__方法第一個參數永遠是,self。表示建立的實例自己, 所以,在__init__方法內部,就能夠把各類屬性綁定到self, 所以,self就指向建立的實例自己。 有了__init__方法,在建立實例的時候,就不能傳入空的參數了 必須傳入與__init__方法匹配的參數,但self不須要傳,Python 解釋器本身會把實例變量傳進去。 res = Student('Jake', 60, '男') print(res.age)#60 和普通方法相比,在類中定義的函數只有一點不一樣,就是第一個參數永遠 都是self,而且調用時,不用傳遞參數。除此以外,與類的方法與普通方 法沒有什麼區別。 總結: __dict__ : 可查詢類和對象中內容,並以字典形式返回。 1.類名+() ---->實例化一個對象 2.這個時候會自動執行__init__方法,而且將對象傳給__init__的self參數 3.給對象封裝相應的屬性。 2.數據封裝 面向對象編程的一個重要的特色就是數據封裝。 在上面的Student類中,每一個實例都擁有各自的name,age,sex這些數據。 既然Student實例自己就擁有這些數據,要訪問這些數據,就沒有必要從 外面的函數去訪問,能夠直接在Student類的內部定義訪問數據的函數, 這樣,就把「數據」給封裝起來了。這些封裝數據的函數是和Student類本 身是關聯起來的,咱們稱之爲類的方法: class Student(object): def __init__(self, name, age, sex): self.name = name self.age = age self.sex =sex def print_message(self): print('%s:%s:%s' % (self.name, self.age, self.sex)) res = Student('Jake', 60, '男') res.print_message()#Jake:60:男 這樣一來,咱們從外部看Student類,就只須要知道,建立實例須要給出name,age,sex 而如何打印,都是在Student類的內部定義的,這些數據和邏輯被「封裝」起來了,調用很 容易,但卻不用知道內部實現的細節。封裝的另外一個好處就是,能夠給Student類增長新 的方法。 總結: 1.類是建立實例的模板,而實例則是一個一個具體的對象,各個實例擁有的數據都是 互相獨立的,互不影響。 2.方法就是與實例綁定的函數,和普通函數不一樣,方法能夠直接返回實例的數據。 3.Python容許對實例變量綁定任何數據,也就是說,對於兩個實例變量,雖然他們 都是同一類的不一樣實例,但擁有的變量名稱均可能不一樣。