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 annotated क्षेत्रहरूबाट __init__, __repr__, __eq__ (र वैकल्पिक रूपमा क्रमबद्ध/हashing) उत्पन्न गर्दछ — बोरिंग, त्रुटि-प्रवण 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) सुरक्षित रूपमा परिवर्तनीय डिफल्टहरू प्रदान गर्दछ (साझा-परिवर्तनीय-डिफल्ट फन्दा बेवास्ता गर्दै)।
# 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 हटाउँछ — कोडलाई सफा, कम त्रुटि-प्रवण, र अधिक पढ्न योग्य बनाउँछ (स्वचालित-उत्पन्न __init__/__repr__/__eq__, साथै अपरिवर्तनीयता र सुरक्षित डिफल्टहरू)।
तिनीहरू यस तरह वर्गहरू म्यानुअली लेख्ने वा जब तपाइँलाई परिवर्तनशीलता/विधिहरू चाहिन्छ तब namedtuple प्रयोग गर्ने को लागि एक idiomatical आधुनिक विकल्प हो। __slots__ एक लक्षित कार्यसम्पादन अनुकूलन हो जसले विशाल संख्याको वस्तुहरु बनाउँदा मेमोरी र विशेषता पहुँच गति अर्थपूर्ण रूपमा कम गर्दछ।
दुवै जान्दै — @dataclass दैनिक सफा डेटा मডलिङको लागि र __slots__ (अब slots=True मार्फत संयोजन गर्न सकिन्छ) मेमोरी-गंभीर गरम बाटोहरूको लागि — कुशल, राखिने योग्य Python वर्गहरू लेख्नको लागि वर्तमान सर्वोत्तम अभ्यासहरू प्रतिबिम्ब गर्दछ।