Nhảy đến nội dung chính

Generic

Generics cho phép bạn xác định kiểu dữ liệu một cách tổng quát, giúp viết code linh hoạt và an toàn hơn về mặt kiểu dữ liệu – đặc biệt hữu ích khi viết class, hàm làm việc với nhiều kiểu dữ liệu khác nhau.

Python hỗ trợ Generics, đặc biệt từ phiên bản Python 3.5 trở đi, nhờ vào typing module.

Cú pháp cơ bản với Generic trong Python

from typing import TypeVar, Generic, List

T = TypeVar("T")  # T là một kiểu bất kỳ

class Box(Generic[T]):
    def __init__(self, content: T):
        self.content = content

    def get_content(self) -> T:
        return self.content

# Dùng cụ thể
box_int = Box 
box_str = Box[str]("hello")

print(box_int.get_content())  # 👉 123
print(box_str.get_content())  # 👉 "hello"

T ở đây có thể là int, str, List[str], hay bất cứ kiểu nào bạn muốn

Ứng dụng thực tế

1. Với hàm:

from typing import TypeVar

T = TypeVar("T")

def identity(x: T) -> T:
    return x

print(identity(5))       # int
print(identity("test"))  # str

2. Với container:

from typing import List

def first_item(items: List[T]) -> T:
    return items[0]

Một số generic types hay dùng trong typing

Type Ý nghĩa
List[T] Danh sách chứa các phần tử kiểu T
Dict[K, V] Dictionary với key là K, value là V
Optional[T] Có thể là T hoặc None
Union[T1, T2, ...] Có thể là một trong các kiểu liệt kê
Tuple[T1, T2] Tuple với các phần tử theo thứ tự kiểu
Callable[[T1, T2], R] Hàm nhận T1, T2 trả về R
Generic[T] Dùng để tạo class generic

Tác giả: Đỗ Ngọc Tú
Công Ty Phần Mềm VHTSoft