เมธอดของคลาสใน 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