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
-
Mảng trong Python
-
Lệnh if, if...else, if...elif...else trong Python
-
Hàm trong Python là gì? Các hàm trong Python
-
Hàm repr() trong Python
-
Kiểu dữ liệu trong Python: chuỗi, số, list, tuple, set và dictionary
-
Ma trận trong Python
-
Hàm property() trong Python
-
Hàm sorted() trong Python
-
Hàm format() trong Python
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
-
6 phần mềm chỉnh sửa ảnh miễn phí tốt nhất trên máy tính
Hôm qua 3 -
Khắc phục sự cố không thể chạy được file .exe
Hôm qua 4 -
Những câu nói hay về tình anh em xã hội, stt về tình anh em kết nghĩa càng đọc càng thấm
Hôm qua -
Cách vô hiệu hóa Facebook nhưng vẫn dùng Messenger
Hôm qua -
Tổng hợp các cách bật Bluetooth trên Windows 10/8/7
Hôm qua -
Dãn hay giãn đúng chính tả? Co dãn hay Co giãn, Thư dãn hay Thư giãn mới đúng?
Hôm qua -
Fake IP, phần mềm đổi IP, lướt web ẩn danh tốt nhất
Hôm qua -
Cách hiện đuôi file, xem phần mở rộng file trên Windows 11/10/7/8
Hôm qua -
Một số cách sửa lỗi Start Menu trên Windows 10 ngừng hoạt động
Hôm qua 5 -
3 cách cố định hình ảnh trong Word, khóa di chuyển để không làm ảnh hưởng bố cục
Hôm qua