如何理解與區別Python裡的類別、物件與實例

class ,object ,instance in Python.

by yenchialu

在物件導向技術中三個經常使用到的名詞,我們可以用很多的描述去側面形容他們的關係

  • 物件是類別的一個實例
  • 將類別實例化就是個物件
#範例 1
#創建智慧型手機的類別,因為含有相機功能,所以繼承了相機的能力
class Camera :
    def __init__(self,pixel) :
        self.camera_function = True
        self.camera_pixel = pixel
    def take_picture(self) :
        print ("喀擦,照片已存檔")

class Smartphone(Camera) :
    def __init__(self,name,brand,price,pixel) :
				super().__init__(pixel)
        self.name = name
        self.brand = brand
        self.price = price
    def on_sale(self,discount) :
        self.price = self.price*(100-discount)/100

	

#創造一個物件,雖然沒給變數參考他,但他確實是個存在記憶體中的物件,也是smartphone的一個實例
Smartphone("iphone 11","Apple",1000,1000)

#又創造了一個物件 iphone_11,他是個物件,同時也是Smartphone的實例,同時也是Camera的一個實例   
iphone_11 = Smartphone("iphone 11","Apple",1000,1000)
iphone_11.on_sale(20)

類別很好區分,在上述範例可以理解,類別其實就是class裡的所有東西,是我們製作物件的一個藍圖,我們定義了一些屬型(name,brand,price),也定義了一個方法(on_sale)。讓之後有人要在做出Smartphone這種類型的物件時,能直接使用。

那物件跟類別怎麼區分呢,其實可以按照字面上的意思來形容。

  • 物件 就是一個存在的東西
  • 實例 是某個類型 存在的東西

從上面程式碼的例子,我有一台iphone 11,他除智慧型手機定義的東西,還繼承了相機的內容。

我們用isinstance(),判斷是否有繼承關係以及判斷iphone 11是否為Camera的一個實例。

print(isinstance(iphone_11,Camera),isinstance(iphone_11,Smartphone))

#輸出結果
>>> True True

這個例子,我們有以下幾個正確的描述:

  • iphone_11 是 個物件
  • iphone_11 是 由Smartphone實例化的一個物件
  • iphone_11 是 Smartphone的一個實例
  • iphone_11 是 Camera 的一個實例

以幾以下幾個”錯誤”或者”不全”的描述

  • iphone_11 是個Camera實例化的一個物件 (錯誤) iphone_11 是 由Smartphone實例化的一個物件
  • iphone_11 是個實例 (解釋不全) iphone_11 是”某個東西”的實例

問題回顧

  • 請用一句話告訴我 類別、實例、物件的關係 ?

You may also like

Leave a Comment