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
Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:


Cũ vẫn chất
-
Cách sao chép hoặc tạo bản sao toàn bộ trang tính trong Google Sheets
Hôm qua -
Dynamic System Updates là gì?
Hôm qua -
4 cách kiểm tra lịch sử giao dịch BIDV trên điện thoại, máy tính
Hôm qua -
Cách chặn từ khóa và Hashtag trên Twitter
Hôm qua -
Sạc không dây là gì? Nó nhanh hơn hay chậm hơn sạc dây? Danh sách smartphone Android hỗ trợ sạc không dây
Hôm qua -
Hàm COUNTIFS, cách dùng hàm đếm ô theo nhiều điều kiện trong Excel
Hôm qua -
Valentine đen là gì? Valentine đen là ngày nào?
Hôm qua -
Các cách làm, tùy chỉnh trong bài sẽ giúp tăng tốc Windows 10 của bạn "nhanh như gió"
Hôm qua 6 -
Cách dùng Terabox lưu trữ với 1TB miễn phí
Hôm qua 5 -
Cách sửa lỗi không thấy bộ điều hợp mạng trên Windows 10
Hôm qua