Python學習筆記(二十)
定義簡單的類(只包含方法)
面向物件是更大的封裝,在一個類中封裝多個方法,這樣通過這個類創建出來的物件,就可以直接呼叫這些方法了
定義只包含方法的類
在Python中藥定義一個只包含方法的類,語法格式如下
class 類名: def 方法1(self,引數): pass def 方法2(self,引數): pass
方法的定義格式和之前學習過的函式幾乎一樣
區別在於第一個引數必須是self,稍後會介紹
注意:類名的命名規則要符合大駝峰命名法
建立物件
當一個類定義完成之後,要失業這個類來建立物件,語法格式如下:
物件變數 = 類名()
第一個面向物件程式
需求
小貓愛吃魚,小貓要喝水
分析
1、定義一個貓類
2、定義兩個方法吃和喝
3、按照需求--不需要定義屬性
class Cat(): def eat(self): print("小貓要喝水") def drink(self): print("小貓愛吃魚") Tom = Cat() Tom.eat() Tom.drink()
引用概念的強調
在面向物件開發中,引用的概念是同樣適用的
在python中使用類建立物件之後,tom變數中仍然記錄的是物件在記憶體中的地址
也就是tom變數引用了新建的貓物件
使用print輸出物件變數,預設情況下,是能夠輸出這個變數引用的物件是由哪一個類建立的物件,以及在記憶體中的地址(十六進位制表示)
提示:在計算機中,通常使用十六進位制表示記憶體地址
十進位制和十六進位制都是用來表達數字的,只是表示的方式不一樣
十進位制和十六進位制的數字之間可以來回轉換
%d可以以10進位制輸出數字
%x可以以16進位制輸出數字
方法中的self引數
給物件增加屬性
在Python中,要給物件設定屬性,非常的容易,但是不推薦使用
因為:物件屬性的封裝應該封裝在類的內部
只需要在類的外部的程式碼中直接通過,設定一個屬性即可
這種方式很簡單,但是這種方法不推薦使用!
使用self在方法內部輸出每一隻貓的名字
由哪一個物件呼叫方法,方法內的self就是哪一個物件的引用
在類封裝的方法內部,self就表示當前呼叫方法的物件自己
呼叫方法時,程式設計師不需要傳遞self引數
在方法內部
可以通過self.訪問物件屬性
也可以通過self.呼叫其他的物件方法
class Cat(): def eat(self): print(" %s 要喝水" % self.name) def drink(self): print("%s 愛吃魚" % self.name) Tom = Cat() Tom.name = "湯姆" Tom.eat() Tom.drink() print(Tom) print("%d" % id(Tom)) print("%x" % id(Tom)) jerry = Cat() jerry.name = "大懶貓" jerry.eat() jerry.drink() print(jerry) print("%d" % id(jerry)) print("%x" % id(jerry))
初始化方法
之前程式碼的問題,存在Bug
如果把設定屬性放在呼叫的末尾就會出現屬性上的報錯的問題
在日常開發中,不推薦在類的外部給物件增加屬性
如果在執行時,沒有找到屬性,程式會報錯
物件應該包含哪些屬性,應該封裝在類的內部