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 @staticmethod
trang trí.
Cú pháp của @staticmethod
là:
@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 Dates
lớ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 toDashDate
bê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 Dates
chính nó và chỉ yêu cầu các tham số.
Chúng ta cũng có thể tạo toDashDate
bê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 Dates
lớ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 DatesWithSlashes
ghi đè phương thức tiện ích tĩnh toDashDate
vì 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 DatesWithSlashes
lớp.