เมธอดของคลาสใน Python เป็นเมธอดที่ผูกกับคลาส แต่ไม่ใช่อ็อบเจกต์ของคลาสนั้น วิธีการแบบคงที่ก็เหมือนกัน แต่มีความแตกต่างพื้นฐานบางประการ สำหรับเมธอดของคลาส เราต้องระบุ @classmethod decorator และสำหรับเมธอดแบบคงที่ @staticmethod decorator จะถูกใช้
ไวยากรณ์สำหรับวิธีการเรียน
class my_class: @classmethod deffunction_name(cls, arguments): #Function Body return value
ไวยากรณ์สำหรับวิธีคงที่
class my_class: @staticmethod deffunction_name(arguments): #Function Body return value
Classmethod และ StaticMehtod ต่างกันอย่างไร
วิธีการเรียน | วิธีการคงที่ |
---|---|
วิธีการเรียนใช้ cls (คลาส) เป็นอาร์กิวเมนต์แรก | เมธอดแบบสแตติกไม่ใช้พารามิเตอร์เฉพาะใดๆ |
เมธอดของคลาสสามารถเข้าถึงและแก้ไขสถานะของคลาสได้ | Static Method ไม่สามารถเข้าถึงหรือแก้ไขสถานะคลาสได้ |
วิธีการเรียนใช้คลาสเป็นพารามิเตอร์เพื่อทราบสถานะของคลาสนั้น | เมธอดสแตติกไม่ทราบเกี่ยวกับสถานะของคลาส วิธีการเหล่านี้ใช้ในการทำงานยูทิลิตี้บางอย่างโดยใช้พารามิเตอร์บางอย่าง |
@classmethod มัณฑนากร ถูกใช้ที่นี่ | ใช้มัณฑนากร @staticmethod ที่นี่ |
เมธอด Static ใช้สำหรับทำงานยูทิลิตี้บางอย่าง และเมธอดคลาสใช้สำหรับเมธอดของโรงงาน เมธอดของโรงงานสามารถส่งคืนอ็อบเจ็กต์คลาสสำหรับกรณีการใช้งานที่แตกต่างกันได้
โค้ดตัวอย่าง
from datetime import date as dt class Employee: def __init__(self, name, age): self.name = name self.age = age @staticmethod defisAdult(age): if age > 18: return True else: return False @classmethod defemp_from_year(emp_class, name, year): return emp_class(name, dt.today().year - year) def __str__(self): return 'Employee Name: {} and Age: {}'.format(self.name, self.age) e1 = Employee('Dhiman', 25) print(e1) e2 = Employee.emp_from_year('Subhas', 1987) print(e2) print(Employee.isAdult(25)) print(Employee.isAdult(16))
ผลลัพธ์
Employee Name: Dhiman and Age: 25 Employee Name: Subhas and Age: 31 True False