Dataclasses (@dataclass, Python 3.7+) वर्गांसाठी boilerplate पद्धती स्वयंचलितपणे तयार करतात जे मुख्यतः डेटा धारण करतात. __slots__ हे एक ऑप्टिमाइजेशन आहे जे मेमरी कमी करते आणि per-instance __dict__ टाळून विशेषता प्रवेश वेग वाढवते.
Dataclasses (@dataclass, Python 3.7+) वर्गांसाठी boilerplate पद्धती स्वयंचलितपणे तयार करतात जे मुख्यतः डेटा धारण करतात. __slots__ हे एक ऑप्टिमाइजेशन आहे जे मेमरी कमी करते आणि per-instance __dict__ टाळून विशेषता प्रवेश वेग वाढवते.
from dataclasses import dataclass
# ❌ without dataclass — lots of repetitive boilerplate
class Point:
def __init__(self, x, y):
self.x = x; self.y = y
def __repr__(self):
return f"Point(x={self.x}, y={self.y})"
def __eq__(self, other):
return (self.x, self.y) == (other.x, other.y)
# ✅ with @dataclass — all of the above generated automatically
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
p # Point(x=1, y=2) — __repr__ generated
p == Point(1, 2) # True — __eq__ generated
@dataclass टिप्पणीयुक्त फील्डमधून __init__, __repr__, __eq__ (आणि वैकल्पिकरित्या ordering/hashing) तयार करतो — कंटाळवाहू, त्रुटी-प्रवण boilerplate काढून.
from dataclasses import dataclass, field
@dataclass(frozen=True) # frozen → immutable (hashable, usable as dict key)
class Config:
name: str
tags: list = field(default_factory=list) # mutable default done safely
timeout: int = 30 # default value
frozen=True उदाहरणे अपरिवर्तनीय बनवते; field(default_factory=list) सुरक्षितपणे बदलण्यायोग्य डिफॉल्ट प्रदान करते (shared-mutable-default जाळ टाळून).
# normally, each instance has a __dict__ to store attributes (flexible but memory-heavy)
class Regular:
def __init__(self, x, y): self.x, self.y = x, y
# __slots__ → fixed attribute set, NO per-instance __dict__
class Slotted:
__slots__ = ("x", "y") # only these attributes allowed
def __init__(self, x, y): self.x, self.y = x, y
s = Slotted(1, 2)
s.z = 3 # ❌ AttributeError — can't add attributes not in __slots__
सामान्यतः प्रत्येक उदाहरण गतिशील __dict__ मध्ये विशेषता संचयित करते. __slots__ विशेषतांचा एक निश्चित संच घोषित करते जो संक्षिप्त, निश्चित संरचनामध्ये संचयित केला जातो — महत्त्वपूर्ण मेमरी बचत करते आणि प्रवेश वेग वाढवते, लचकपणा खर्चात (अनियंत्रित विशेषता जोडू शकत नाही).
@dataclass(slots=True) # Python 3.10+ — dataclass WITH __slots__
class Point:
x: int
y: int
@dataclass → any class that's mostly data (DTOs, configs, records) — cleaner, less code
__slots__ → when you create MANY instances (millions) and memory/speed matters
(e.g. nodes in a big data structure, large simulations)
Dataclasses एक व्यापकपणे वापरलेली आधुनिक वैशिष्ट्य आहे जी डेटा-होल्डिंग वर्गांसाठी पुनरावृत्ती boilerplate काढून टाकते — कोड स्वच्छ, कमी त्रुटी-प्रवण आणि अधिक वाचनीय बनवते (auto-generated __init__/__repr__/__eq__, तसेच अपरिवर्तनीयता आणि सुरक्षित डिफॉल्ट).
ते अशा वर्गांना हाताने लिहिण्याचे किंवा जेव्हा आपल्याला mutability/methods आवश्यक असते तेव्हा namedtuple वापरण्याचे आधुनिक idiomaticपर्याय आहेत. __slots__ हे एक लक्षित कार्यक्षमता ऑप्टिमाइजेशन आहे जे विशाल संख्येने ऑब्जेक्ट चलवताना मेमरी आणि विशेषता प्रवेश वेग लक्षणीयरित्या कमी करते.
दोन्ही जाणून घेणे — @dataclass दैनंदिन स्वच्छ डेटा मॉडेलिंगसाठी आणि __slots__ (आता slots=True द्वारे एकत्र करण्यायोग्य) मेमरी-गंभीर हॉट पाठ्यांशांसाठी — कार्यक्षम, राखणक्षम Python वर्ग लिहिण्याच्या वर्तमान सर्वोत्तम प्रथांना प्रतिबिंबित करते.