在上一篇,我們簡單了解了什麼是 Class,還簡單舉了「寵物領養中心」,來當作 Class 的範例,但此時還看不出這個寵物中心可以做什麼。

所以今天我們要繼續完成我們的寵物領養中心內部功能!
因為 Class 不只能是組裝資料的地方,還可以擁有很多不同的功能唷!

這些功能我們稱它為 Method(方法),可以讓我們在 Class 創造出來的物件「做事情」,讓物件不只是一個資料,而是一個可以做事的資料。

什麼是 Method(方法)?

Method 就像是 Class 工廠裡的「自動操作機器」,每個物件(寵物)被製造出來後,都能使用這台機器(Method)做事。
Method 就像是寫在 Class 裡的函式(function),但她一定要透過物件使用這個工廠內的函式。

延續上次的寵物領養中心,我們來新增一個 Method 給他使用吧!

class Pet:
        def __init__(self, name, age, species):
                self.name = name
                self.age = age
                self.species = species

        def say_hello(self):
                print(f”Hi, my name is {self.name}, I’m a {self.species}!”)

 

所以當我們今天使用這個工廠時,首先要先建立第一隻寵物(物件)
lucky = Pet
(“Lucky”, 3, “Dog”)
所以此時我們就會有一個物件叫做lucky,他會有名字、年紀、品種的資料
然後他就可以使用我們做好的 
say_hello() 的 Method 來和我們打招呼!
lucky.say_hello()
此時我們執行的結果就會是
Hi, my name is Lucky, I’m a Dog!

這樣從 Pet 製作出來的每個寵物都會有自己的「打招呼」!
因為只要我們在 Class 裡製作出來的 Method,每個透過 Class 製作出來的物件都可以使用唷!

 

可以直接 print 物件嗎?

當然可以啊,只是他不一定是你想要的資訊唷!
就像此時我們直接 print(lucky)
系統會直接給你一段你看不懂的數據,可能會類似這樣
<__main__.Pet object at 0x00000123>
這段數據代表我們的 lucky 保存在系統裡面的記憶體位址,看不懂是正常的!

所以想要他 print 出我們想要的樣子,就可以透過 __str__ 來調整

        def __str__(self):
                return f”{self.name} is a {self.age}-year-old {self.species}”

讓他和 Method 一樣在 Class 內部新增後,此時我們 print(lucky) 就會獲得他的資料了
Lucky is a 3-year-old dog

是不是發現了每個資料前面跟 Method 的括弧內有 self ?下一次我們就來討論 self 是什麼並且增加更多領養中心內的功能吧!

Close Menu