目次
1. Dataclass भने के हो?
Dataclass को सारांश
Python कोdataclass
भनेको संस्करण 3.7 मा परिचय गरिएको सुविधा हो, जसले वर्ग परिभाषा सरल बनाउँछ र अनावश्यक कोड लेखन घटाउँछ। विशेष गरी, डेटा राख्नका लागि वर्गलाई प्रभावकारी रूपमा परिभाषित गर्दा उपयोगी हुन्छ। dataclass
प्रयोग गरेर, वर्गभित्र बारम्बार लेखिने __init__
र __repr__
जस्ता मेथडहरू स्वचालित रूपमा उत्पन्न गर्न सकिन्छ। उदाहरणका लागि, परम्परागत वर्ग परिभाषामा, आरम्भिक मेथडलाई म्यानुअली परिभाषित गर्नुपर्दछ, तर dataclass
प्रयोग गर्दा तलको जस्तै सरल हुन्छ।from dataclasses import dataclass
@dataclass
class User:
name: str
age: int
उपरोक्त कोडले __init__
मेथड र __repr__
मेथडलाई स्वचालित रूपमा उत्पन्न गर्दछ, जसले डेटा राख्नमा विशेषीकृत वर्गलाई सजिलै परिभाषित गर्न सकिन्छ। थप रूपमा, प्रकार एनोटेशन प्रयोग गरेर, डेटा प्रकार र वर्गको संरचना स्पष्ट रूपमा देखाउन सकिन्छ, जसले कोडको पढ्नयोग्यता सुधार्छ।2. Dataclass को फाइदाहरू
कोडको सरलीकरण
dataclass
प्रयोग गरेर, परम्परागत क्लास परिभाषा भन्दा कोड धेरै छोटो हुन्छ, पढ्न सजिलो हुन्छ। विशेष गरी, __init__
मेथड र __repr__
मेथडको स्वचालित निर्माणले, हातले परिभाषित गर्न आवश्यक नपर्दा, त्रुटि घटाउन मद्दत गर्छ।@dataclass
class Product:
id: int
name: str
price: float
यस्ता सरल क्लासहरूमा पनि, dataclass
प्रयोग गरेर आरम्भिकरण, स्ट्रिङ प्रतिनिधित्व जस्ता कार्यहरू सबै स्वचालित रूपमा उपलब्ध हुन्छन्। साथै, क्लासमा अतिरिक्त फील्डहरू थप्न चाहँदा पनि पछि सजिलै संशोधन गर्न सकिन्छ, जसले लचिलोपन प्रदान गर्छ।स्वचालित रूपमा उत्पन्न हुने मेथडहरू
dataclass
ले __init__
मेथड बाहेक, __repr__
र __eq__
जस्ता मेथडहरू स्वचालित रूपमा उत्पन्न गर्छ। यसले क्लासहरू बीचको वस्तुहरूको तुलना वा वस्तुको अवस्थालाई स्ट्रिङ प्रतिनिधित्वमा परिवर्तन गर्दा विशेष प्रक्रिया लेख्न आवश्यक पर्दैन।डिफ़ॉल्ट मान र प्रकार एनोटेशन
dataclass
ले फील्डमा डिफ़ॉल्ट मान सेट गर्न सक्छ, र प्रकार एनोटेशनलाई पनि समर्थन गर्छ। यसले विकासकर्तालाई डेटा प्रकार र आरम्भिक मान स्पष्ट रूपमा निर्दिष्ट गर्न अनुमति दिन्छ, जसले क्लास परिभाषा सहज बनाउँछ।@dataclass
class Employee:
name: str
age: int = 25 # डिफ़ॉल्ट २५ वर्ष
यसरी, आवश्यकतानुसार फील्डमा डिफ़ॉल्ट मान सेट गरेर, आरम्भिकरण समयमा वैकल्पिक पैरामीटरहरू राख्न सकिन्छ।3. परम्परागत वर्ग परिभाषा सँग तुलना
स्मृति र प्रदर्शनको अनुकूलन
dataclass
ले, परम्परागत वर्ग परिभाषासँग तुलना गर्दा, स्मृति प्रयोग र प्रदर्शनमा पनि फाइदा प्रदान गर्दछ। विशेष गरी, ठूलो मात्रामा डेटा ह्यान्डल गर्ने अनुप्रयोगहरूमा, Python 3.10 बाट परिचय गरिएकोslots
विकल्प प्रयोग गरेर, अझ प्रभावकारी स्मृति प्रयोग हासिल गर्न सकिन्छ।@dataclass(slots=True)
class User:
name: str
age: int
slots=True
निर्दिष्ट गरेर, प्रत्येक इन्स्ट्यान्सको लागि शब्दकोश वस्तु सिर्जना हुने सट्टा, उच्च स्मृति दक्षता भएको स्लट प्रयोग गरिन्छ। यसले ठूलो संख्यामा इन्स्ट्यान्सहरू ह्यान्डल गर्दा स्मृति प्रयोग घटाउन मद्दत गर्छ। साथै, गुणधर्मको पहुँच पनि तेज हुन्छ, जसले प्रदर्शनको दृष्टिले पनि फाइदा दिन्छ।परम्परागत वर्गसँगको भिन्नता
परम्परागत वर्ग परिभाषामा, सबै मेथडहरू म्यानुअली परिभाषित गर्न आवश्यक हुन्थ्यो, तरdataclass
मा यी स्वतः उत्पन्न हुन्छन्, जसले विकासकर्तालाई डेटा संरचनाको डिजाइनमा केन्द्रित हुन अनुमति दिन्छ। साथै, वर्गमा धेरै फील्डहरू हुने वा विशेष व्यवहार दिन चाहिने अवस्थामा पनि, dataclass
प्रयोग गर्दा कोड सरल रहन्छ।4. Dataclass को उन्नत सुविधाहरू
slots
द्वारा मेमोरी अनुकूलन
Python 3.10 पछि, dataclass
ले slots
लाई समर्थन गर्दछ, जसले मेमोरी प्रयोगलाई अझ अनुकूलन गर्न सक्छ। __slots__
प्रयोग गरेर, इन्स्ट्यान्सका गुणहरू शब्दकोशको सट्टा स्लट नामक हल्का स्वरूपमा संग्रह गर्न सकिन्छ, जसले मेमोरी बचत सम्भव बनाउँछ। वास्तविक प्रभाव जाँच्नको लागि, तलको उदाहरण हेर्नुहोस्।@dataclass(slots=True)
class Person:
name: str
age: int
यो क्लासलाई ठूलो मात्रामा डेटा संग प्रयोग गर्दा, मेमोरी खपतमा उल्लेखनीय कमी देख्न सकिन्छ। साथै, स्लट प्रयोग गर्दा गतिशील गुणहरू थप्न सकिँदैन, जसले अनपेक्षित बगहरू रोक्न मद्दत गर्छ।अपरिवर्तनीय क्लासको निर्माण (frozen=True
)
dataclass
मा frozen=True
विकल्प पनि छ, जसलाई निर्दिष्ट गर्दा, निर्माण पछि परिवर्तन गर्न नसकिने अपरिवर्तनीय (immutable) क्लास परिभाषित गर्न सकिन्छ। अपरिवर्तनीय वस्तुहरू डेटा स्थिरता आवश्यक पर्ने परिस्थितिहरूमा र थ्रेड-सेफ एप्लिकेशनहरूमा उपयोगी हुन्छन्।@dataclass(frozen=True)
class ImmutableUser:
username: str
age: int
frozen=True
निर्दिष्ट गर्दा, सिर्जना गरिएको इन्स्ट्यान्सका गुणहरू परिवर्तन गर्न खोज्दा AttributeError
उत्पन्न हुन्छ। यसले डेटा अपरिवर्तनीयता सुनिश्चित गर्दछ।कस्टम फील्ड र field()
फङ्क्शन
थप रूपमा, dataclass
मा field()
फङ्क्शन प्रयोग गरेर, फील्डको व्यवहारलाई विस्तृत रूपमा नियन्त्रण गर्न सकिन्छ। उदाहरणका लागि, आरम्भ गर्दा विशेष फील्डलाई बेवास्ता गर्न चाहनुहुन्छ वा डिफल्ट आरम्भिक मानलाई जटिल रूपमा सेट गर्न चाहनुहुन्छ भने उपयोगी हुन्छ।@dataclass
class Product:
name: str
price: float = field(default=0.0, init=False)
यस उदाहरणमा, price
फील्ड आरम्भ गर्दा सेट हुँदैन, र डिफल्ट मानको रूपमा 0.0 प्रयोग हुन्छ। यसले विशेष सर्तहरू अन्तर्गत क्लासको व्यवहारलाई लचिलो रूपमा नियन्त्रण गर्न मद्दत गर्छ।5. Dataclass को उपयोग केसहरू
प्रयोगकर्ता डेटा व्यवस्थापन
dataclass
ले डेटा धारण गर्ने मुख्य उद्देश्य भएको वर्गको लागि अत्यन्त उपयुक्त छ। उदाहरणका लागि, प्रयोगकर्ता डेटा वा सेटिङ जानकारी धारण गर्ने वर्गलाई संक्षिप्त रूपमा परिभाषित गर्न सकिन्छ।@dataclass
class UserProfile:
username: str
email: str
is_active: bool = True
प्रयोगकर्ता डेटा जस्तै धेरै फील्डहरू भएको वर्गहरूमा पनि, dataclass
प्रयोग गर्दा कोड पढ्न सजिलो हुन्छ र मर्मतसम्भार गर्न सहज हुन्छ।डेटा रूपान्तरण र JSON सञ्चालन
dataclass
डेटा रूपान्तरण र JSON सञ्चालनमा पनि अत्यन्त उपयोगी छ। डेटाबेस वा API बाट प्राप्त डेटा वर्ग वस्तुमा म्यापिङ गरेर, सोही रूपमा अन्य स्वरूपमा रूपान्तरण गर्न सजिलो हुन्छ। साथै, Python को मानक पुस्तकालयको dataclasses
मोड्युलमा वस्तुहरूलाई टुपल वा शब्दकोशमा रूपान्तरण गर्ने कार्यहरू उपलब्ध छन्।import json
from dataclasses import dataclass, asdict
@dataclass
class Product:
id: int
name: str
price: float
product = Product(1, "Laptop", 999.99)
print(json.dumps(asdict(product)))
यस उदाहरणमा, asdict()
कार्य प्रयोग गरेर dataclass
वस्तुलाई शब्दकोशमा रूपान्तरण गरी, त्यसलाई JSON स्वरूपमा रूपान्तरण गरी आउटपुट गरिन्छ। यसरी, डेटा वर्ग वस्तुको रूपमा ह्यान्डल गर्दा पनि, सजिलै अन्य ढाँचामा रूपान्तरण गर्न सकिने कुरा dataclass
को फाइदा हो।6. अन्य पुस्तकालयहरूसँगको एकीकरण
Pydantic प्रयोग गरेर डेटा मान्यकरण
dataclass
अन्य Python पुस्तकालयहरूसँग पनि एकीकृत गर्न सकिन्छ, र विशेष गरी Pydantic
प्रयोग गरेर डेटा मान्यकरणलाई सुदृढ गर्न सकिन्छ। Pydantic
प्रकार संकेतहरू प्रयोग गरेर, वर्गमा मान्यकरण तर्कलाई सजिलै थप्ने पुस्तकालय हो, जसले डेटा को शुद्धता जाँच गर्न मद्दत गर्दछ। तलको उदाहरणमा, Pydantic
प्रयोग गरेर, dataclass
मा प्रकार मान्यकरण थपिएको छ।from pydantic.dataclasses import dataclass
from pydantic import ValidationError
@dataclass
class Book:
title: str
pages: int
try:
book = Book(title=123, pages="two hundred")
except ValidationError as e:
print(e)
यो कोडमा, title
फील्ड स्ट्रिङ नभएमा वा pages
पूर्णांक नभएमा त्रुटि उत्पन्न हुन्छ। यसरी, dataclass
मा मान्यकरण समावेश गरेर, सही डेटा सुनिश्चित गर्न सकिन्छ, जसले ठूलो स्तरको अनुप्रयोगहरू र API विकासमा प्रयोगको लागि उपयुक्त बनाउँछ।
7. Dataclass को उपयोगमा सामान्य गल्तीहरू
परिवर्तनीय डिफ़ॉल्ट आर्ग्युमेन्टहरू
dataclass
प्रयोग गर्दा सामान्य गल्तीहरू मध्ये एक हो, परिवर्तनशील वस्तुहरूलाई डिफ़ॉल्ट आर्ग्युमेन्टको रूपमा सेट गर्नु। उदाहरणका लागि, सूची वा शब्दकोशलाई डिफ़ॉल्ट आर्ग्युमेन्टको रूपमा सेट गर्दा, सबै इन्स्ट्यान्सहरूमा एउटै सूची साझा हुन सक्छ।from dataclasses import dataclass, field
@dataclass
class Team:
members: list = field(default_factory=list)
यसरी, default_factory
प्रयोग गरेर व्यक्तिगत सूची निर्माण गर्न निर्दिष्ट गरेर, यो समस्या टाल्न सकिन्छ। परिवर्तनशील डिफ़ॉल्ट आर्ग्युमेन्टहरूलाई टाल्नु अनपेक्षित बगहरू उत्पन्न हुनबाट बच्न महत्त्वपूर्ण छ।गुणको प्रकार र डिफ़ॉल्ट मानको असंगतता
अर्को सामान्य गल्ती भनेको, गुणको प्रकार र डिफ़ॉल्ट मान मिल्दैन भने हो।dataclass
मा, प्रकार एनोटेशन प्रयोग गर्न सिफारिस गरिन्छ, तर निर्दिष्ट प्रकार र डिफ़ॉल्ट मान मिलेन भने त्रुटि हुन सक्छ।@dataclass
class User:
name: str
age: int = "twenty" # यो अनुपयुक्त हो
यस्ता केसहरूमा, प्रकार एनोटेशन अनुसार डिफ़ॉल्ट मानलाई उपयुक्त रूपमा सेट गर्नु महत्त्वपूर्ण छ।8. निष्कर्ष
Python कोdataclass
ले डेटा धारणमा विशेषीकृत क्लास परिभाषा सरल बनाउँछ, र विकासकर्ताहरूलाई धेरै सुविधा प्रदान गर्दछ। कोडको पठनीयता मात्र सुधार्दैन, slots
र frozen
विकल्पहरू प्रयोग गरेर मेमोरी अनुकूलन र डेटाको अपरिवर्तनीयता सुनिश्चित गर्ने कार्यक्षमता पनि भएको कारण, यसले विभिन्न प्रयोजनहरूलाई समर्थन गर्न सक्छ। त्यसै गरी, अन्य पुस्तकालयहरूसँगको एकीकरणले डेटा मान्यकरण र JSON रूपान्तरण जस्ता उन्नत कार्यक्षमता पनि सजिलै लागू गर्न सकिन्छ, जसले ठूलो स्तरको अनुप्रयोग विकासका लागि उपयुक्त बनाउँछ। यी फाइदाहरूलाई ध्यानमा राखी, कृपया आगामी परियोजनामा dataclass
लाई प्रयोग गरेर हेर्नुहोस्।