在 Python 裡的任何東西 ( 數字、文字、函式...等 ) 都是物件,只是 Python 預設會將大部份物件的機制隱藏,只顯示最常使用的方法,除非有特殊需求,不然不需要更動到預設物件的行為。
什麼是物件呢?物件是一種自訂的資料結構,裡面可能包含了各種變數、屬性、函式或方法,一個物件可以透過他的屬性或方法,定義他和別的物件進行互動。
建立類別的方式類似建立一個函式,差別在於函式使用 def 開頭,而類別使用 class 開頭,下方的程式碼會建立一個「空」的類別 human ( 很像一個人在最開始只是一個細胞,身上什麼器官都還沒長出來 ):
class human():
pass # 使用 pass 可以建立一個空類別
接著使用建立類別的預設方法「__init__」( 注意前後是兩條底線 ),將預設的屬性加入類別裡。
def __init__(self) 預設帶有一個 self 參數,代表透過類別建立的物件本體,內容使用「.屬性」就能將指定的屬性加入類別中。
__init__ 可以不用定義,但如果需要有一些預設的屬性,就可以定義在裡面
class human():
def __init__(self): # 建立預設屬性的寫法
self.eye = 2 # 兩個眼睛
self.ear = 2 # 兩個耳朵
self.nose = 1 # 一個鼻子
self.mouth = 1 # 一張嘴巴
除了預設的屬性,也可以自訂屬性,下方的例子定義了 say 和 play 兩個函式作為 human 的屬性,執行後,就等同於一個名為 oxxo 的人說話和玩棒球。
注意,字定義屬性的第一個參數也都必須是 self。
class human():
def __init__(self):
self.eye = 2
self.ear = 2
self.nose = 1
self.mouth = 1
def say(self, msg): # 定義 say
print(msg)
def play(self, thing): # 定義 play
print(thing)
oxxo = human()
oxxo.say('hello') # hello
oxxo.play('baseball') # baseball
屬性除了可以定義在類別裡,也可以從外部定義,下面的程式碼額外定義了手 hand 和腳 leg 兩個屬性。
class human():
def __init__(self):
self.eye = 2
self.ear = 2
self.nose = 1
self.mouth = 1
def say(self, msg):
print(msg)
def play(self, thing):
print(thing)
human.hand = 2 # 定義 hand 屬性
human.leg = 2 # 定義 leg 屬性
oxxo = human()
print(oxxo.hand) # 2
print(oxxo.leg) # 2
剛剛有提到 self 這個參數,這個參數代表「透過類別建立的物件本體」,使用 self 可以讀取到這個物件的所有屬性,下方的例子從外部定義了 oxxo.name 的屬性,在 human 裡就能使用 self.name 取得這個屬性。