Computer >> Máy Tính >  >> Lập trình >> Python

Phương thức lớp so với phương thức tĩnh trong Python

Phương thức lớp trong Python là một phương thức, được liên kết với lớp nhưng không phải là đối tượng của lớp đó. Các phương thức static cũng giống nhau nhưng có một số khác biệt cơ bản. Đối với các phương thức lớp, chúng ta cần chỉ định @classmethod decorator và đối với phương thức tĩnh, @staticmethod decorator được sử dụng.

Cú pháp cho Phương thức Lớp.

class my_class:
   @classmethod
  deffunction_name(cls, arguments):
      #Function Body
      return value

Cú pháp cho phương pháp tĩnh.

class my_class:
   @staticmethod
   deffunction_name(arguments):
      #Function Body
      return value

Sự khác biệt giữa Classmethod và StaticMehtod là gì?

Phương pháp lớp Phương pháp tĩnh
Phương thức lớp lấy cls (class) làm đối số đầu tiên. Phương thức tĩnh không nhận bất kỳ tham số cụ thể nào.
Phương thức lớp có thể truy cập và sửa đổi trạng thái lớp. Phương thức tĩnh không thể truy cập hoặc sửa đổi trạng thái lớp.
Phương thức lớp nhận lớp làm tham số để biết về trạng thái của lớp đó. Các phương thức static không biết về trạng thái lớp. Các phương thức này được sử dụng để thực hiện một số tác vụ tiện ích bằng cách lấy một số tham số.
@classmethod decorator được sử dụng ở đây. @staticmethod decorator được sử dụng ở đây.

Các phương thức Static được sử dụng để thực hiện một số tác vụ tiện ích và các phương thức lớp được sử dụng cho các phương thức gốc. Các phương thức gốc có thể trả về các đối tượng lớp cho các trường hợp sử dụng khác nhau.

Mã mẫu

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))

Đầu ra

Employee Name: Dhiman and Age: 25
Employee Name: Subhas and Age: 31
True
False