Kết hợp __slots__ với @dataclass để có cả type safety và memory efficiency:
python
from dataclasses import dataclass
import sys
@dataclass
class UserNormal:
id: int; name: str; email: str
@dataclass(slots=True) # Python 3.10+
class UserSlots:
id: int; name: str; email: str
print(sys.getsizeof(UserNormal(1, 'Alice', 'a@b.com'))) # ~256 bytes (có __dict__)
print(sys.getsizeof(UserSlots(1, 'Alice', 'a@b.com'))) # ~56 bytes (không có __dict__)
# frozen=True + slots=True — immutable và memory-efficient
@dataclass(frozen=True, slots=True)
class Point:
x: float
y: float
p = Point(1.0, 2.0)
# p.x = 3.0 # FrozenInstanceErrorDùng @dataclass(slots=True) khi có hàng triệu instances — tiết kiệm ~30-60% memory.
Combine __slots__ with @dataclass for type safety and memory efficiency:
python
@dataclass(slots=True) # Python 3.10+ — auto-adds __slots__
class UserSlots:
id: int; name: str; email: str
@dataclass(frozen=True, slots=True) # Immutable + memory-efficient
class Point:
x: float; y: float
# p.z = 3.0 # AttributeErrorUse @dataclass(slots=True) when creating millions of instances — saves 30-60% memory.