Class method รับคลาสเองเป็นอาร์กิวเมนต์แรก ทำให้เรียกใช้เมธอดภายในคลาสได้โดยไม่ต้องสร้างอินสแตนซ์ก่อน ใช้ดีคอเรเตอร์ @classmethod ก่อนประกาศเมธอด
คุณสมบัติหลัก:
- Class method ผูกกับคลาส ไม่ขึ้นอยู่กับการสร้างอินสแตนซ์
- สามารถแก้ไขคลาสได้ ซึ่งจะส่งผลต่อทุกอินสแตนซ์
การใช้ classmethod
สร้างคลาส WeekDay มีเมธอด daynames เรียกใช้โดยไม่ต้องสร้างอ็อบเจกต์
โค้ดตัวอย่าง
class WeekDay:
day_name = ['Mon','Tue','Wed','Thu','Fri']
@classmethod
def daynames(n):
print('The WeekDays are', n.day_name)
WeekDay.daynames()
# หรือ
WeekDay().daynames()
ผลลัพธ์
The WeekDays are ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
The WeekDays are ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
ไม่ใช้ classmethod
เขียนฟังก์ชันทั่วไปนอกคลาสก็ได้ผลลัพธ์เหมือนกัน แสดงว่าทำไมต้องมี classmethod
โค้ดตัวอย่าง
def daynames():
day_name = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
print('The WeekDays are', day_name)
daynames()
ผลลัพธ์
The WeekDays are ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']