Python staticmethod ()

Hàm tích hợp staticmethod () trả về một phương thức tĩnh cho một hàm nhất định.

Cú pháp của staticmethod()là:

 staticmethod (hàm)

Sử dụng staticmethod()được coi là một cách không theo kiểu Pythonic để tạo một hàm tĩnh.

Do đó, trong các phiên bản Python mới hơn, bạn có thể sử dụng trình @staticmethodtrang trí.

Cú pháp của @staticmethodlà:

 @staticmethod def func (args,…)

Tham số staticmethod ()

Các staticmethod()phương pháp có một tham số duy nhất:

  • function - hàm cần được chuyển đổi thành một phương thức tĩnh

Trả về giá trị từ staticmethod ()

Giá trị staticmethod()trả về một phương thức tĩnh cho một hàm được truyền dưới dạng tham số.

Phương thức tĩnh là gì?

Các phương thức tĩnh, giống như các phương thức lớp, là các phương thức được liên kết với một lớp chứ không phải đối tượng của nó.

Chúng không yêu cầu tạo cá thể lớp. Vì vậy, chúng không phụ thuộc vào trạng thái của đối tượng.

Sự khác biệt giữa phương thức tĩnh và phương thức lớp là:

  • Phương thức static không biết gì về lớp và chỉ xử lý các tham số.
  • Phương thức lớp hoạt động với lớp vì tham số của nó luôn là chính lớp.

Chúng có thể được gọi bởi cả lớp và đối tượng của nó.

 Class.staticmethodFunc () hoặc thậm chí Class (). StaticmethodFunc ()

Ví dụ 1: Tạo một phương thức tĩnh bằng staticmethod ()

 class Mathematics: def addNumbers(x, y): return x + y # create addNumbers static method Mathematics.addNumbers = staticmethod(Mathematics.addNumbers) print('The sum is:', Mathematics.addNumbers(5, 10))

Đầu ra

 Tổng là: 15 

Khi nào bạn sử dụng phương thức tĩnh?

1. Nhóm chức năng tiện ích thành một lớp

Các phương thức static có một trường hợp sử dụng hạn chế bởi vì, giống như các phương thức của lớp hoặc bất kỳ phương thức nào khác trong một lớp, chúng không thể truy cập các thuộc tính của chính lớp đó.

Tuy nhiên, khi bạn cần một hàm tiện ích không truy cập bất kỳ thuộc tính nào của một lớp nhưng có nghĩa là nó thuộc về lớp, chúng ta sử dụng các hàm tĩnh.

Ví dụ 2: Tạo một hàm tiện ích dưới dạng phương thức tĩnh

 class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") date = Dates("15-12-2016") dateFromDB = "15/12/2016" dateWithDash = Dates.toDashDate(dateFromDB) if(date.getDate() == dateWithDash): print("Equal") else: print("Unequal")

Đầu ra

 Công bằng

Ở đây, chúng ta có một Dateslớp chỉ hoạt động với ngày tháng có dấu gạch ngang. Tuy nhiên, trong cơ sở dữ liệu trước đây của chúng tôi, tất cả các ngày đều có dấu gạch chéo.

Để chuyển đổi ngày gạch chéo thành ngày gạch ngang, chúng tôi đã tạo một hàm tiện ích toDashDatebên trong Dates.

Nó là một phương thức tĩnh vì nó không cần truy cập bất kỳ thuộc tính nào của Dateschính nó và chỉ yêu cầu các tham số.

Chúng ta cũng có thể tạo toDashDatebên ngoài lớp, nhưng vì nó chỉ hoạt động cho ngày tháng, nên giữ nó bên trong Dateslớp là hợp lý .

2. Có một triển khai duy nhất

Các phương thức tĩnh được sử dụng khi chúng ta không muốn các lớp con của một lớp thay đổi / ghi đè một triển khai cụ thể của một phương thức.

Ví dụ 3: Cách kế thừa hoạt động với phương thức static?

 class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") class DatesWithSlashes(Dates): def getDate(self): return Dates.toDashDate(self.date) date = Dates("15-12-2016") dateFromDB = DatesWithSlashes("15/12/2016") if(date.getDate() == dateFromDB.getDate()): print("Equal") else: print("Unequal")

Đầu ra

 Công bằng

Ở đây, chúng tôi sẽ không muốn lớp con DatesWithSlashesghi đè phương thức tiện ích tĩnh toDashDatevì nó chỉ có một công dụng duy nhất, tức là thay đổi ngày thành ngày tháng.

Chúng ta có thể dễ dàng sử dụng phương thức static để có lợi cho mình bằng cách ghi đè getDate()phương thức trong lớp con để nó hoạt động tốt với DatesWithSlasheslớp.

thú vị bài viết...