Mike的Python學院

Python、物件導向程式設計、OOP

Mike Ku

Learn Code With Mike品牌創辦人

2021/10/20

解析Python物件導向設計的3種類型方法

Q:什麼是實體方法(Instance Method)?
Python類別(Class)中沒有加任何裝飾詞(Decorator)的方法(Method),至少要有一個self參數,於方法(Method)被呼叫時指向物件(Object),其後可以依需求增加額外參數,如下範例:
class Cars:
def drive(self):
print("Drive is instance method.")
實體方法(Instance Method)透過self參數可以自由的存取物件(Object)的屬性(Attribute)及其他方法(Method),藉此來改變物件(Object)的狀態,如下範例:
class Cars:
# 建構式
def __init__(self):
self.color = "blue"
def drive(self):
print(f"{self} is {self.color}.")
self.message()
def message(self):
print("Message method is called.")
mazda = Cars()
mazda.drive()
Q:什麼是類別方法(Class Method)?
Python類別(Class)中有@classmethod裝飾詞(Decorator)的方法(Method),被呼叫時,相較於實體方法(Instance Method)的self參數指向物件(Object),類別方法(Class Method)為cls參數,指向類別(Class),如下範例:
class Cars:
# 類別方法(Class Method)
@classmethod
def open_door(cls):
print("Open door is class method.")
由於類別方法(Class Method)的cls參數指向類別(Class),所以類別方法(Class Method)僅能改變類別的狀態,而無法改變物件(Object)的狀態,因為它沒有self參數可以存取物件的屬性(Attribute)及方法(Method)。如下範例:
class Cars:
door = 4
# 類別方法(Class Method)
@classmethod
def open_door(cls):
print(f"{cls} has {cls.door} doors.")
mazda = Cars()
mazda.open_door()
Cars.open_door()
Q:什麼是靜態方法(Static Method)?
Python類別中有@staticmethod裝飾詞(Decorator)的方法(Method),可以接受任意的參數,也因為它沒有self及cls參數,所以靜態方法(Static Method)無法改變類別(Class)及物件(Object)的狀態,如下範例:
class Cars:
#靜態方法
@staticmethod
def accelerate():
print("Accelerate is static method.")
靜態方法(Static Method)在類別(Class)中是一個獨立的方法(Method),通常應用於方法(Method)中無需存取物件(Object)的屬性(Attribute)或方法(Method),單純執行傳入參數或功能上運算的情況,如下範例:
class Cars:
# 速率靜態方法
@staticmethod
def speed_rate(distance, minute):
return distance / minute
van = Cars()
van_rate = van.speed_rate(10000, 20)
print("van rate: ", van_rate)
sports_car_rate = Cars.speed_rate(20000, 20)
print("sports car rate: ", sports_car_rate)
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2020/01/python-method.html )網站觀看更多精彩內容。
2 0 191 1