Hướng dẫn classmethod in python - classmethod trong python

  • 1. Class Method – Phương thức thuộc về lớp
  • 2. Static method – Phương thức tĩnh
  • 3. Class method và Static method
  • 4. Khi nào nên sử dụng cái nào?
  • 5. Làm thế nào để khai báo class method và static method?

Nội dung chính

  • 1. Class Method – Phương thức thuộc về lớp
  • 2. Static method – Phương thức tĩnh
  • 4. Khi nào nên sử dụng cái nào?
  • 5. Làm thế nào để khai báo class method và static method?

1. Class Method – Phương thức thuộc về lớp

Nội dung chính

Cái decorator @classmethod là một function decorator được tích hợp sẵn của Python, nó là một biểu thức mà được xử lý sau khi hàm của bạn được định nghĩa. Kết quả của phép xử lý biểu thức đó sẽ được phản chiếu lên phần code định nghĩa hàm của bạn. Một class method (phương thức/hàm thuộc về lớp nào đó) mà nhận vào một class khác làm đối số ngầm định đầu tiên, sẽ giống như một instance method (phương thức/hàm thuộc về một thể hiện/đối tượng của lớp nào đó) nhận vào một instance.

class C(object):
    @classmethod
    def fun(cls, arg1, arg2, ...):

1. Cú pháp

Trong đó:fun: Là hàm mà cần chuyển đổi thành một class method

– fun: Là hàm mà cần chuyển đổi thành một class methodreturns: một class method dành cho hàm này sẽ được trả về.

– returns: một class method dành cho hàm này sẽ được trả về.

Một class method là một method – phương thức mà được gắn với class, mà không phải là gắn với đối tượng của class.

Các class methods có quyền truy cập đến trạng thái của class, bởi vì chúng đều nhận vào một tham số mà trỏ đến class, chứ không phải trỏ đến đối tượng/thể hiện.

2. Static method – Phương thức tĩnh

3. Class method và Static method

Cái decorator @classmethod là một function decorator được tích hợp sẵn của Python, nó là một biểu thức mà được xử lý sau khi hàm của bạn được định nghĩa. Kết quả của phép xử lý biểu thức đó sẽ được phản chiếu lên phần code định nghĩa hàm của bạn. Một class method (phương thức/hàm thuộc về lớp nào đó) mà nhận vào một class khác làm đối số ngầm định đầu tiên, sẽ giống như một instance method (phương thức/hàm thuộc về một thể hiện/đối tượng của lớp nào đó) nhận vào một instance.

class C(object):
    @staticmethod
    def fun(arg1, arg2, ...):
        ...

1. Cú pháp

Trong đó:: Một static method dành cho hàm fun

– fun: Là hàm mà cần chuyển đổi thành một class method

– returns: một class method dành cho hàm này sẽ được trả về.

Một class method là một method – phương thức mà được gắn với class, mà không phải là gắn với đối tượng của class.

Các class methods có quyền truy cập đến trạng thái của class, bởi vì chúng đều nhận vào một tham số mà trỏ đến class, chứ không phải trỏ đến đối tượng/thể hiện.

Class method có thể thay đổi trạng thái của một class, và sự thay đổi này có thể tác động tới tất cả các thể hiện của class này. Ví dụ, nó có thể thay đổi một biến của class, trong khi biến này được sử dụng bởi tất cả các thể hiện của class.

Static method không nhận vào đối số đầu tiên ngầm định nào.

returns: Một static method dành cho hàm fun

4. Khi nào nên sử dụng cái nào?

5. Làm thế nào để khai báo class method và static method?

Nội dung chính

5. Làm thế nào để khai báo class method và static method?

Nội dung chính

Cái decorator @classmethod là một function decorator được tích hợp sẵn của Python, nó là một biểu thức mà được xử lý sau khi hàm của bạn được định nghĩa. Kết quả của phép xử lý biểu thức đó sẽ được phản chiếu lên phần code định nghĩa hàm của bạn. Một class method (phương thức/hàm thuộc về lớp nào đó) mà nhận vào một class khác làm đối số ngầm định đầu tiên, sẽ giống như một instance method (phương thức/hàm thuộc về một thể hiện/đối tượng của lớp nào đó) nhận vào một instance.

1. Cú pháp

Trong đó:

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: 
#Fanpage: https://www.facebook.com/cafedevn
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
# -----------------------------------------------------------


# 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('mayank', 21) 
person2 = Person.fromBirthYear('mayank', 1996) 
  
print person1.age 
print person2.age 
  
# print the result 
print Person.isAdult(22) 

– fun: Là hàm mà cần chuyển đổi thành một class method

21
21
True

– returns: một class method dành cho hàm này sẽ được trả về.

  • w3school
  • python.org
  • Một class method là một method – phương thức mà được gắn với class, mà không phải là gắn với đối tượng của class.

Các class methods có quyền truy cập đến trạng thái của class, bởi vì chúng đều nhận vào một tham số mà trỏ đến class, chứ không phải trỏ đến đối tượng/thể hiện.

  • Class method có thể thay đổi trạng thái của một class, và sự thay đổi này có thể tác động tới tất cả các thể hiện của class này. Ví dụ, nó có thể thay đổi một biến của class, trong khi biến này được sử dụng bởi tất cả các thể hiện của class.
  • Static method không nhận vào đối số đầu tiên ngầm định nào.
  • returns: Một static method dành cho hàm fun

Một static method là một method – phương thức mà được gắn với class, chứ không phải gắn với đối tượng của class.

  • Static method không thể truy cập hay sửa đổi trạng thái của class.
  • Static method hiện diện bên trong class bởi vì nó có ý nghĩa đối với method – phương thức có mặt trong class.
  • – Class method nhận vào cls làm tham số đầu tiên, trong khi static method không cần tới tham số đặc biệt nào.
  • – Class method có thể truy cập hoặc sửa đổi trạng thái của class, trong khi static method không thể truy cập tới hay sửa đổi nó.
  • – Nói chung, static method không biết gì về trạng thái của class. Chúng là những method – phương thức thuộc kiểu tiện ích, nhận vào một số tham số và làm việc trên các tham số đó. Mặt khác, class method phải có được một class làm tham số truyền vào cho nó.
  • – Chúng ta sử dụng cái decorator @classmethod trong Python để tạo ra một class method (phương thức/hàm thuộc về lớp) và sử dụng decorator @staticmethod để tạo ra một static method (phương thức/hàm tĩnh) trong Python.
  • Chúng ta thường sử dụng class method để tạo ra các factory methods. Các factory methods sẽ trả về đối tượng của lớp (tương tự như một hàm constructor) cho các trường hợp sử dụng khác nhau.
  • Chúng ta sẽ thường sử dụng các static methods để tạo ra các hàm tiện ích (utility functions).

Để khai báo một class method trong Python, chúng ta sẽ sử dụng decorator @classmethod, và để khai báo một static method chúng ta sẽ sử dụng decorator @staticmethod.

Chúng ta cùng xem một ví dụ sau để hiểu được sự khác biệt giữa class method và static method. Giả sử, chúng ta muốn tạo ra một class Person. Lúc này, Python không hỗ trợ nạp chồng phương thức (method overloading) giống như C++ hoặc Java, vì vậy chúng ta sẽ sử dụng các class methods để tạo ra các factory methods. Trong ví dụ dưới đây, chúng ta sẽ sử dụng một class method để tạo ra một đối tượng person từ birth year (thông tin về năm sinh).