518
在物件導向技術中三個經常使用到的名詞,我們可以用很多的描述去側面形容他們的關係
- 物件是類別的一個實例
- 將類別實例化就是個物件
#範例 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 是”某個東西”的實例
問題回顧
- 請用一句話告訴我 類別、實例、物件的關係 ?
