Hi 大家好,
今天要開始介紹進階語法中的物件導向篇,那我們開始吧!
Q: 什麼是類別?
A: 舉個例子,在日常生活中,我們常見的食譜
會指導我們如何做出一道菜,裡面會寫著需要哪些食材和做法。這就像是一個類別
,它定義了一個屬性
(食材)和行為
(做法)
如何定義類別
class
關鍵字來定義類別,類別可用來產生一個物件,並定義了物件的屬性和方法MyRecipe
代表為類別名稱
def __init__(self)
代表為定義屬性
,def cook(self, ingredients)
代表為定義方法
class MyRecipe:
def __init__(self):
self.vegetable = 10
def cook(self, ingredients):
print(self.vegetable + ingredients)
my_recipe = MyRecipe()
my_recipe.cook(10)
PS D:\Project\practice> python hi.py
20
PS D:\Project\practice>
Q: 什麼是物件?
A: 根據上面描述的食譜例子,我們依照食譜裡面的食材
和做法
,最後煮出一道菜
,就是一個物件
MyRecipe
代表為類別名稱
my_recipe = MyRecipe()
建立一個物件
my_recipe.cook()
使用物件內定義的方法class MyRecipe:
def cook(self):
print("宮保雞丁")
my_recipe = MyRecipe()
my_recipe.cook()
PS D:\Project\practice> python hi.py
宮保雞丁
PS D:\Project\practice>
什麼是繼承
在各類別中相同的屬性和方法,可以抽出來放在另外一個類別中,原先和其他的類別可以透過繼承的方式來擁有
繼承好處有哪些
減少程式碼重複性,程式碼變得更簡潔,容易維護
舉個例子:
class Animal:
def speak(self):
print("say hi!!!")
def eat(self):
pass
class Dog(Animal):
def __init__(self):
self.name = "Lucky"
class Cat(Animal):
def __init__(self):
self.name = "Mimi"
dog = Dog()
dog.speak()
cat = Cat()
cat.speak()
PS D:\Project\practice> python hi.py
say hi!!!
say hi!!!
PS D:\Project\practice>
慣例
是使用self
,但也可以改成其它名稱
)。因為使用類別產生一物件後,物件要使用物件內的方法
,會偷偷的把物件自己本身
當作方法的第一個參數
,也就是self
。class Cat():
def play(self):
print("一起玩!")
kitty = Cat()
kitty.play()
如果沒有定義參數,會發生錯誤
class Cat():
def play(): <==== 沒定義第一個參數代表自己物件本身
print("一起玩!")
kitty = Cat() <==== 先建立一個實體物件
kitty.play() <==== 使用實體方法
PS D:\Project\practice> python hi.py
Traceback (most recent call last):
File "D:\Project\practice\hi.py", line 6, in <module>
kitty.play()
TypeError: Cat.play() takes 0 positional arguments but 1 was given
PS D:\Project\practice>
@classmethod
裝飾器,才可以說是類別方法,因為才能夠拿到自己的類別,方法被綁定在類別裡面。def play(cls)
中使用的參數cls
也是一種慣例的寫法
,名稱也是可以改
的。它代表的是會把自己的類別名稱
當作是第一個參數
。class Cat():
@classmethod
def play(cls):
print("一起玩!")
Cat.play()
PS D:\Project\practice> python hi.py
一起玩!
PS D:\Project\practice>
@staticmethod
裝飾器,把定義的方法視為不須帶入自己實體或是類別的方法class Cat():
@staticmethod
def play():
print("一起玩!")
# 當作類別方法呼叫
Cat.play()
# 當作實體方法呼叫
kitty = Cat()
kitty.play()
PS D:\Project\practice> python hi.py
一起玩!
一起玩!
PS D:\Project\practice>
那今天就介紹到這裡,我們明天見