Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีการเรียนเทียบกับวิธีการแบบคงที่ใน Python


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