進階語法之1~物件與類別

2-1物件與類別

類別(class)和物件(object),這兩者是緊密相關連的,在進階一點的程式碼中,不時可看到其活躍的身影。

類別是一種複合式的資料型態,裡面可包含有數種屬性,以及處理這些屬性的函式;物件就是變數,只不過其資料型態為某種類別,此類別的屬性值一旦被指定,物件即在當時被建立完成一個類別可以建立許多類似的物件

我們以下列的程式碼,來說明這看似莫測高深的名詞,其實可以很直覺的來理解它

在上圖第1~3行中,等號 = 的左手邊是變數名稱,右邊是變數值。由變數值可以看得出來,變數name的資料型態是字串(str),height的資料型態是整數(int),而weight的資料型態是浮點數(float)

第4行等號左邊的bigball,和第5行的smallball,看起來也像是變數,但等號右邊的ball(50)、ball(25),實在看不出來是甚麼資料型態

在這裡,我們刻意將ball的資料型態設定為類別,在主程式之前就應該先幫它做好定義,所以變數bigball、smallball,就是指定不同屬性值50、25給ball的類似物件

在上圖中,我們用關鍵字class定義一個圓形類別ball,裡面用def宣告三個函式

第一個函式_ _init_ _必然要存在,它叫做建構子,負責在建立物件時,將傳遞過來的變數值,指定成為自己的屬性值。在此做這個動作的,就是第3行的self rad=rad,其中self是物件自己,它用點運算符 . 來連結其半徑屬性rad。等號右邊的rad,即將承接由第10、11行傳來的50、25。

第二個函式area(self),其功能是使用半徑屬性self.rad,來計算該圓形物件面積。因為self就是物件自己,所以不需要再另外傳遞參數給它。

第三個函式draw(self,x,y,a,b,c),是要將此圓形物件繪製出來,所以必須傳遞其位置座標x,y,以及圓形顏色的三個灰階值a,b,c給它。

接著,主程式在第10行指定半徑值50給類別ball,以建立一個大的圓形物件bigball;並在第11行指定半徑值25給類別ball,建立另一個小的圓形物件smallball。

上圖是定義類別、建立物件、呼叫物件函式的完整過程。主程式中第12行、15行,物件是經由點運算符來取用計算圓面積的函式area;第13行、16行函式draw繪圖的結果,出現在上圖右上及右下。

圓的半徑大小是在建立物件時就指定的,是不宜再頻繁改變了;但其位置和顏色的值是在呼叫繪圖函式時,才傳遞給它,卻是可以再視情況調整的。請注意這兩者的區別

這個章節,我們先探討物件的建立及其含義,下一次就可以用它來設計複雜一點的電腦遊戲了。屆時將可發現,很多遊戲中的角色和物體的重複建立,使用的多是物件類別的技巧。

Leave a Comment

Your email address will not be published. Required fields are marked *

Shopping Cart