# Dataclasses और Enums — Python Fundamentals: Basics से Async तक

Source: https://www.geekswithgeeks.com/hi/python/py-dataclasses-enums

> Data रखने वाली classes के लिए @dataclass से boilerplate घटाएँ और fixed named constants के लिए Enum उपयोग करें।

## @dataclass

`@dataclass` type-annotated fields से `__init__`, `__repr__` और `__eq__` बना देता है, इसलिए data classes में boilerplate नहीं लगता।

```python
from dataclasses import dataclass, field

@dataclass
class User:
    name: str
    age: int = 0
    tags: list[str] = field(default_factory=list)

u = User("Ada", 36)
print(u)            # User(name='Ada', age=36, tags=[])
print(u == User("Ada", 36))  # True
```

## Enum

`Enum` values का fixed set नाम देता है, इसलिए code में magic string के बजाय `Status.ACTIVE` पढ़ने को मिलता है।

```python
from enum import Enum

class Status(Enum):
    PENDING = "pending"
    ACTIVE = "active"

s = Status("active")
print(s, s.name, s.value)   # Status.ACTIVE ACTIVE active
```

Mutable defaults के लिए `field(default_factory=list)` उपयोग करें। Dataclass को immutable और hashable बनाने के लिए `frozen=True` जोड़ें।

त्वरित जाँच

**Quiz:** @dataclass कौन-से methods अपने-आप बनाता है?

- [x] __init__, __repr__ और __eq__
- [ ] केवल __del__
- [ ] __enter__ और __exit__
- [ ] कोई नहीं

*Answer:* __init__, __repr__ और __eq__. Dataclasses annotated fields से ये बनाते हैं।
