Code Tu Tam

OOP Python – Class method và Static Method trong Python

Rate this post

Bài trước chúng ta tìm hiểu về biến tĩnh trong Python. Bài viết này CodeTuTam sẽ hướng dẫn bạn tìm hiểu về Class Method và Static Method trong Python. Đồng thời chúng ta cũng sẽ làm rõ hơn khi nào thì dùng class method, khi nào thì dùng static method.

Class Method trong Python là gì?

Decorator là 1 function với tham số đầu vào là 1 function và trả về cũng là 1 function.

Một class method sẽ nhận class dưới dạng tham số ngầm định đầu tiên – việc này giống như các instance method nhận self là tham số đầu tiên của hàm

Cú pháp Class method trong Python

class C(object):
    @classmethod
    def fun(cls, arg1, arg2, ...):
       ....
fun: function that needs to be converted into a class method
returns: a class method for function.

Các đặc điểm của class method

Static method trong Python là gì?

Một hàm tĩnh trong Python sẽ không nhận tham số ngầm định đầu tiên. Một static method cũng là một phương thức được liên kết với class chứ không phải các instance. Nó được gắn trong class vì bản thân hàm này có ý nghĩa đối với các phương thức có mặt trong class đó.

Static method này giống như class method, chỉ khác là không có tham số ngầm định.

Cú pháp hàm tĩnh trong Python

class C(object):
    @staticmethod
    def fun(arg1, arg2, ...):
        ...
returns: a static method for function fun.

So sánh Class method và static method

Điểm khác nhau giữa class method và static method là

Khi nào sử dụng Class method, static method

Cách định nghĩa một class method và static method

Để hiểu rõ cách hoạt động của class method và static method, chúng ta làm thử ví dụ tạo class Person. Hiện tại thì Python không hỗ trợ cơ chế overloading giống trong C++ hay Java do vậy chúng ta sẽ sử dụng class method để tạo factory method.

Trong ví dụ dưới dây, chúng ta tạo một class method để tạo 1 đối tượng person từ năm sinh.

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

Ví dụ về Static Method

class MyClass:
	def __init__(self, value):
		self.value = value

	@staticmethod
	def get_max_value(x, y):
		return max(x, y)

# Create an instance of MyClass
obj = MyClass(10)

print(MyClass.get_max_value(20, 30))

print(obj.get_max_value(20, 30))

Kết quả

30
30

Ví dụ đầy đủ về class method và static method

# 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))

Kết quả

21
25
True

 

 

 

Exit mobile version