Hàm staticmethod() trong Python
Hàm staticmethod() được coi là un-Pythonic (ngôn ngữ không chính thống của Python). Trong các phiên bản mới hơn của Python, bạn nên sử dụng decorator @staticmethod để thay thế.
Cú pháp của @staticmethod là:
@staticmethod
def func(args, ...)
Cú pháp của hàm staticmethod() trong Python
Hàm staticmethod() được xác định bằng cú pháp sau:
staticmethod(function)
Tham số của hàm staticmethod()
Hàm staticmethod() có một tham số duy nhất:
- Hàm: Hàm cần được chuyển thành một static method
Giá trị trả về của hàm staticmethod()
Hàm staticmethod() trả về một static method cho một hàm tham số mà bạn đưa vào.
Static method là gì?
Static method, giống như các class method, là những method được liên kết với một class chứ không phải đối tượng của nó. Static method có ưu điểm là không phụ thuộc vào trạng thái của đối tượng.
Sự khác biệt giữa static method và class method là:
Static method không biết gì về class và chỉ xử lý các tham số. Trong khi đó, class method luôn dựa vào class vì tham số của nó luôn luôn là chính class.
Cả static method và class method đều có thể được gọi bởi cả class và đối tượng.
Class.staticmethodFunc()
hoặc thậm chí
Class().staticmethodFunc()
Ví dụ 1: Tạo một static method bằng cách sử dụng hàm staticmethod()
class Quantrimang:
def themso(x, y):
return x + y
# tạo static method thêm số
Quantrimang.themso = staticmethod(Quantrimang.themso)
print('Tổng số là:', Quantrimang.themso(5, 10))
Khi chạy chương trình, kết quả thu được là:
Tổng số là: 15
Khi nào chúng ta nên sử dụng static method?
1. Nhóm hàm tiện ích vào một class
Khả năng ứng dụng của static method khá hạn chế bởi, cũng giống với class method hoặc bất kỳ method nào bên trong class, chúng không thể truy cập vào 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 lại mang ý nghĩa rằng nó thuộc về lớp đó, chúng ta sẽ sử dụng static method.
Ví dụ 2: Tạo một hàm tiện ích bằng static method
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("Trùng khớp")
else:
print("Không trùng khớp")
Chạy chương trình cho kết quả là:
Trùng khớp
Ở đây, chúng ta có class Dates chỉ hoạt động với dự liệu ngày tháng năm sử dụng dấu gạch ngang để biểu thị. Tuy nhiên, trong dữ liệu cũ, tất cả ngày tháng năm đều dùng dấu gạch chéo để biểu thị.
Để chuyển đổi từ ngày tháng năm dùng dấu gạch chéo sang ngày tháng năm dùng dấu gạch ngang, chúng ta tạo một hàm tiện ích toDashDate bên trong Dates.
Nó là một static method bởi nó không cần truy cập bất cứ thuộc tính nào của Dates và chỉ cần tham số nhập vào.
Chúng ta cũng có thể tạo toDashDate bên ngoài class nhưng vì nó chỉ xử lý các dữ liệu liên quan tới ngày tháng nên để nó trong class Dates là lựa chọn logic, giúp code trình bày gọn gàng hơn.
2. Có duy nhất một thực thi
Static method được sử dụng khi chúng ta không muốn một class con trong một class thay đổi/ghi đè lên một thực thi đặc biệt của một method.
Ví dụ 3: Kế thừa hoạt động như thế nào với static method?
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("Trùng khớp")
else:
print("Không trùng khớp")
Kết quả
Trùng khớp
Ở đây, chúng ta không muốn class con DatesWithSlashes ghi đè lên static utility method toDashDate bởi vì nó chỉ sử dụng một lần duy nhất, ví dụ thay đổi ngày tháng từ dạng sử dụng gạch chéo sang dạng gạch ngang.
Chúng ta có thể dễ dàng sử dụng static method để có thêm nhiều lợi ích bằng cách ghi đè method getDate() trong class con để nó hoạt động tốt với class DatesWithSlashes.
Bạn nên đọc
Cũ vẫn chất
-
Cách chèn emoji vào ảnh trên iPhone cực đơn giản
Hôm qua -
YouTuber tìm ra cách chơi game Doom trong ứng dụng Notepad
Hôm qua -
Sự thật bất ngờ: Tuổi thọ nòng pháo xe tăng chỉ được 6 giây
Hôm qua -
Cheat Aoe 2, mã lệnh Aoe 2 tất cả các bản đầy đủ nhất
Hôm qua -
Khắc phục tình trạng các phím chức năng không hoạt động trong Windows 10
Hôm qua -
15 công cụ chẩn đoán để kiểm tra tình trạng PC Windows
Hôm qua -
Hướng dẫn thiết lập và quản lý FTP Server trên Windows 10
Hôm qua -
Phân biệt USB 3.0 và USB 2.0
Hôm qua -
Cách quản lý mật khẩu đã lưu trên Microsoft Edge: Xem, xóa, sửa, xuất
Hôm qua -
Cách xem phiên bản di động của một trang web bất kỳ trên máy tính
Hôm qua