Phân Biệt 02 Hàm Static Method Trong Python Và Hàm Class Method Trong Python

Static Method va Class Method trong Python-min

Xin chào bạn. Trong chuyên mục lần này MCI sẽ giúp các bạn phân biệt giữa hàm Static method trong python và hàm Class method trong Python.
Nếu chúng ta phát triển sự hiểu biết trực quan về sự khác biệt của những hàm trên, chúng ta có thể viết Python hướng đối tượng truyền đạt ý định của nó rõ ràng hơn và sẽ dễ duy trì hơn về lâu dài.

1. Static Method trong python là gì?

MyClass.static method được đánh dấu bằng decorator @staticmethod để gắn cờ nó là một static method.

Loại phương thức này không nhận tham số self hay cls (nhưng tất nhiên có thể miễn phí chấp nhận một số lượng tùy ý các tham số khác).

Do đó, một phương thức tĩnh không thể sửa đổi trạng thái đối tượng cũng như trạng thái lớp. Các phương thức tĩnh bị hạn chế về dữ liệu mà chúng có thể truy cập – và chúng chủ yếu là một cách để tạo không gian tên cho các phương thức của bạn.

Static method trong python bản chất vẫn là những method được liên kết với một class chứ. Và nó có ưu điểm là không phụ thuộc vào trạng thái của đối tượng.

2. Cú pháp của hàm staticmethod() trong Python

Cú pháp:

class C(object):

    @staticmethod

    def fun(arg1, arg2, …):

        …

returns: a static method for function fun.

  • Static method trong python là một phương thức được liên kết với lớp chứ không phải đối tượng của lớp.
  • Static method không thể truy cập hoặc sửa đổi trạng thái lớp.
  • Nó hiện diện trong một lớp vì nó có ý nghĩa đối với phương thức hiện diện trong lớp.

3. Tham số của hàm Static Method trong python

Hàm staticmethod() chỉ 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.

4. Class Method trong python là gì?

Decorator của  @classmethod là hàm tích hợp, là một biểu thức được đánh giá sau khi hàm của bạn được xác định. Kết quả của đánh giá đó làm mờ định nghĩa chức năng của bạn.

Một Class Method như một đối số đầu tiên ngầm định, giống như một instance method.

Cú pháp:

lớp C (đối tượng):

    @classmethod

    def fun (cls, arg1, arg2, …):

       ….

fun: hàm cần được chuyển đổi thành một Class Method trong python

Return: một class method cho hàm.

Class Method trong python là một phương thức được liên kết với class chứ không phải đối tượng của Class..

Chúng có quyền truy cập vào trạng thái của Class vì class method nhận một tham số class parameter trỏ đến class của nó chứ không phải đối tượng của class.

Các Class Method trong python có thể sửa đổi, áp dụng cho tất cả các trường hợp của class. Ví dụ. Ví dụ như nó có thể sửa đổi một biến class  sẽ được áp dụng cho tất cả các trường hợp.

5. Sự khác biệt giữa Class Method và Static Method trong python

Class method sẽ lấy cls làm tham số đầu tiên trong static method không cần tham số cụ thể.

Một Class method có thể truy cập hoặc sửa đổi trạng thái class trong khi một static method không thể truy cập hoặc sửa đổi nó.

Nói chung, các static method không biết gì về trạng thái của class. Chúng là các method kiểu tiện ích ( utility type methods) nhận một số tham số và hoạt động dựa trên các tham số đó. – Mặt khác, các method của class method phải có class là một tham số.

Chúng ta sử dụng @classmethod decorator trong python để tạo một class method và chúng tôi sử dụng @staticmethod decorator để tạo một static method trong python.

6. Sử dụng static method hay class method trong những trường hợp nào

Thông thường. mọi người sử dụng class method để tạo các factory methods. Các factory methods trả về các đối tượng lớp (tương tự như một phương thức khởi tạo) cho các trường hợp sử dụng khác nhau.

Sử dụng các static method để tạo các utility functions (Hàm tiện ích)

7. Làm thế nào để định nghĩa static method và class method

Để xác định một class method trong python, chúng ta cần sử dụng @classmethod decorator và để xác định một static method, chúng ta sử dụng @staticmethod decorator.


Chúng ta hãy cùng xem xét một ví dụ để hiểu sự khác biệt giữa cả hai. Giả sử chúng ta muốn tạo một Class Person. Hiện tại, python không hỗ trợ nạp chồng phương thức như C ++ hoặc Java, vì vậy chúng ta cần sử dụng các class method để tạo các factory methods. Trong ví dụ dưới đây, chúng ta sử dụng một class method để tạo một đối tượng người từ năm sinh.


Như đã giải thích ở trên, chúng ta sử dụng các static method để tạo các utility functions (hàm tiện ích). Trong ví dụ dưới đây, chúng ta sử dụng Static method để kiểm tra xem một người có phải là người lớn hay không.

Ví dụ:
# python program to demonstrate
# use of class method and static method
from datetime import date
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
# a class method to create a Person object by birth year.
    @classmethod
    def fromBirthYear(cls, name, year):
        return cls(name, date.today().year - year)
      
 # a static method to check if a Person is adult or not.
    @staticmethod
    def isAdult(age):
        return age > 18
  
person1 = Person('My Anh', 21)
person2 = Person.fromBirthYear('My Anh', 1996)
  
print (person1.age)
print (person2.age)
  
# print the result
print (Person.isAdult(22))

Output:
21
25
True

Chia sẻ của MCI về Static và Class method sẽ kết thúc tại đây, mong rằng thông qua bài viết các bạn đã hiểu hơn về 2 method này và dễ dàng ứng dụng hơn. Các bạn nhớ theo dõi MCI để nhận được nhiều kiến thức hơn nha!

Bạn cũng có thể tham khảo thêm về khoá học Python cơ bản đến nâng cao tại MCI để tìm cho mình lộ trình học hiệu quả hơn nhé.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *