1. 程式人生 > 其它 >Python學習筆記(二十)

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

如果把設定屬性放在呼叫的末尾就會出現屬性上的報錯的問題

在日常開發中,不推薦在類的外部給物件增加屬性

如果在執行時,沒有找到屬性,程式會報錯

物件應該包含哪些屬性,應該封裝在類的內部