Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass
Lớp dữ liệu trong Python là các lớp thông thường được thiết kế chủ yếu để lưu trữ trạng thái (state) thay vì xử lý logic phức tạp. Nếu bạn cần một lớp chỉ chứa các thuộc tính mà không yêu cầu nhiều phương thức, bạn có thể sử dụng lớp dữ liệu để đơn giản hóa công việc.

Module dataclasses trong Python giúp dễ dàng tạo lớp dữ liệu bằng cách tự động thêm các phương thức đặc biệt như __init__() và __repr__() vào lớp do người dùng định nghĩa. Ngoài ra, module này còn cung cấp một số chức năng bổ sung rất tiện lợi.
Lớp thông thường không sử dụng dataclass trong Python
Dưới đây là ví dụ về cách định nghĩa một lớp thông thường. Bạn cần tự viết các phương thức như __init__() và __repr__() để đạt được chức năng mong muốn:
class Student:
def __init__(self, id, name):
# Các biến instance
self.id = id
self.name = name
def __repr__(self):
return f"Thông tin sinh viên: id={self.id}, name={self.name}"
student = Student(22, "Paul")
print(student)
Kết quả:
Bài viết này được đăng tại [free tuts .net]
Thông tin sinh viên: id=22, name=Paul
Sử dụng @dataclass trong Python
Bây giờ, hãy xem cách sử dụng @dataclass để đạt được kết quả tương tự nhưng với ít mã hơn:
from dataclasses import dataclass
@dataclass
class Student:
id: int
name: str
student = Student(22, "Paul")
print(student)
Kết quả:
Student(id=22, name='Paul')
Ở đây, bạn không cần định nghĩa các phương thức như __init__() hay __repr__() vì @dataclass đã tự động tạo ra chúng.
Giá trị mặc định trong dataclass
Bạn có thể đặt giá trị mặc định cho các thuộc tính để không cần truyền chúng vào hàm khởi tạo. Ví dụ:
from dataclasses import dataclass
@dataclass
class Student:
id: int
name: str = "John"
student = Student(22)
print(student)
Kết quả:
Student(id=22, name='John')
Lưu ý: Các thuộc tính có giá trị mặc định phải được khai báo sau các thuộc tính không có giá trị mặc định. Nếu không, Python sẽ báo lỗi.
Lớp dữ liệu không thể thay đổi (Immutable/Frozen Data Classes) trong Python
Để tạo các đối tượng không thể thay đổi (immutable), bạn có thể đặt tham số frozen=True trong decorator @dataclass. Khi đó, các giá trị thuộc tính chỉ có thể được đọc mà không thể sửa đổi sau khi đối tượng được tạo.
Ví dụ:
from dataclasses import dataclass
@dataclass(frozen=True)
class Student:
id: int
name: str = "John"
student = Student(22, "Paul")
student.id = 20 # Lỗi
Kết quả:
dataclasses.FrozenInstanceError: cannot assign to field 'id'
Chuyển đổi lớp dữ liệu thành tuple hoặc dictionary
Module dataclasses cung cấp hai hàm tiện lợi là astuple() và asdict() để chuyển đổi một đối tượng dataclass thành tuple hoặc dictionary.
Ví dụ:
from dataclasses import dataclass, astuple, asdict
@dataclass
class Student:
id: int
name: str
student = Student(22, "Paul")
print("Tuple:", astuple(student))
print("Dictionary:", asdict(student))
Tham số tùy chọn trong @dataclass trong Python
Cú pháp đầy đủ của decorator @dataclass bao gồm các tham số tùy chọn sau:
@dataclass(init=True, repr=True, eq=True,
order=False, unsafe_hash=False, frozen=False,
match_args=True, kw_only=False, slots=False)

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng