Method (เมธอด) คือ ความสามารถในการทำงานของ Object (อ๊อบเจ็ค) มันถูกสร้างขึ้นมาพร้อมกับการสร้างออบเจ็กต์ ซึ่งออบเจ็กต์ที่สร้างจาก Class (คลาส) เดียวกันก็จะมีรายการของเมธอดต่างๆ เหมือนกัน และในบทความนี้เราจะมาพูดถึง Static Method หรือ การใช้งานเมธอดแบบคงที่ใน ภาษาไพทอน กัน
Static Method
Static method คือ การทำให้ฟังก์ชันสามารถเรียกใช้ได้เลย โดยข้อมูลไม่มีการเปลี่ยนแปลง สามารถใช้ function ใน class static ได้ แต่ไม่สามารถเข้าถึง instance ของคลาสนั้นได้ สำหรับบางเมธอด อาจไม่จำเป็นต้องใช้ข้อมูลแอตทริบิวต์ ที่รับเข้ามาจากทาง init แต่จะใช้ค่าที่เปลี่ยนแปลงไปตามการเรียกเมธอดแต่ละครั้ง เช่น
class calculator:
def __init__(self):
pass
def add(self,a,b,):
return a+b
def subtract(self,a,b):
return a-b
จากโค้ดจะเห็นได้ว่า เมื่อเราจะบวกหรือลบเลขอะไรก็ตาม สามารถกำหนดเป็นอาร์กิวเมนต์ให้แก่เมธอดเหล่านั้นได้เลย ดังนั้นเราสามารถแก้ไขคลาสตัวอย่างให้มีลักษณะ ดังนี้
1.) ไม่จำเป็นต้องมี init เพื่อรับค่าแอตทริบิวต์
2.) ไม่จำเป็นต้องสร้างอินสแตนซ์ เพราะเรากำหนดเป็นอาร์กิวเมนต์โดยตรงอยู่แล้ว
3.) สามารถเรียกเมธอดจากชื่อคลาสได้โดยตรง
และจากลักษณะที่ได้กล่าวมานั้น จะเป็นเมธอดอีกรูปแบบหนึ่ง ซึ่งเราเรียกมันว่า Static Method โดยจะมีข้อกำหนดหลักๆ ดังนี้
- การใช้งานจะต้องระบุคำสั่ง @staticmethod ไว้ก่อนบรรทัดที่จะสร้างเมธอด
- กำหนดเมธอดด้วย def ตามปกติ โดยในส่วนของพารามิเตอร์ ไม่ต้องมี self เพราะไม่สามารถอ้างถึง Instance Attribute ได้
- ภายในเมธอดสามารถอ้างถึง Class Attribute หรือเมธอดอื่นๆ ผ่านชื่อคลาสได้โดยตรง
- การเรียกใช้เมธอดดังกล่าว จากภายนอกคลาส ก็ให้ระบุผ่านชื่อคลาส
ตัวอย่าง
class calculator:
pi = 3.14
@staticmethod
def add(a,b):
return a+b
@staticmethod
def subtract(a,b):
return a-b
@staticmethod
def get_pi():
return calculator.pi #การอ้างถึง Class Attribute
@staticmethod
def increment(a):
return calculator.add(a,1) #การอ้างถึงเมธอดอื่น
#การเรียกใช้งานภายนอกคลาส ซึ่งสามารถระบุผ่านชื่อคลาสได้โดยตรง
print(calculator.add(10,20),calculator.subtract(30,25),calculator.get_pi(),calculator.increment(99),
sep ='\n')
ผลลัพธ์

จากตัวอย่างที่ออกมา เป็นเพียงแนวทางให้เราเห็นลักษณะเด่นและการใช้งานของ Static Method เท่านั้น ซึ่งไม่จำเป็นที่ภายในคลาสจะต้องมีเฉพาะ Static Method เพียงอย่างเดียว เราสามารถมี Instance Method ด้วยก็ได้ และนอกจากนั้น เราก็ยังสามารถมี init เพื่อรับข้อมูลเข้ามาใช้งานภายในคลาสสำหรับกรณีอื่นที่ไม่เกี่ยวข้องกับ Static Method ได้อีกด้วย
ช่องทางการศึกษาเพิ่มเติมเกี่ยวกับ : Python
ไพทอน การสร้างคลาส การเขียนโปรแกรมแบบออปเจ็ค Create Class OOP
Instance Method การเรียกใช้งานเมธอดผ่านอินสแตนซ์
Instance Attribute และ Initializer เมธอดชนิดพิเศษ
การเรียกใช้ฟังก์ชันแบบ Recursion ในไพทอน ฟังชันก์ทำงานซ้ำเรียกตัวเอง