डेटाक्लास 3.7 संस्करण के बाद से पायथन के मानक पुस्तकालय में जोड़ा गया एक नया मॉड्यूल है। यह @dataclass डेकोरेटर को परिभाषित करता है जो स्वचालित रूप से कंस्ट्रक्टर जादू विधि __init__(), स्ट्रिंग प्रतिनिधित्व विधि __repr__(), __eq__() विधि उत्पन्न करता है जो उपयोगकर्ता परिभाषित वर्ग के लिए ==ऑपरेटर (और कुछ और) को अधिभारित करता है।
डेटाक्लास डेकोरेटर के पास निम्नलिखित हस्ताक्षर हैं
dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)
सभी तर्क एक बूलियन मान लेते हैं जो दर्शाता है कि संबंधित जादू विधि या विधियां स्वचालित रूप से उत्पन्न होंगी या नहीं।
डिफ़ॉल्ट रूप से 'init' तर्क सही है। यह स्वचालित रूप से कक्षा के लिए __init__() विधि उत्पन्न करेगा।
आइए हम डेटाक्लास डेकोरेटर का उपयोग करके छात्र वर्ग को निम्नानुसार परिभाषित करें
from dataclasses import dataclass @dataclass class Student(object): name : str age : int percent : float
स्वतः उत्पन्न __init__() विधि इस प्रकार है
def __init__(self, name: str, age: int, percent: float): self.name = name self.age = age self.percent = percent
यदि वर्ग स्पष्ट रूप से __init__() विधि को परिभाषित करता है, तो init पैरामीटर को अनदेखा कर दिया जाता है।
repr तर्क डिफ़ॉल्ट रूप से भी सत्य है। इसलिए __repr__() मेथड अपने आप जेनरेट हो जाएगी। __repr__() वस्तु का औपचारिक स्ट्रिंग प्रतिनिधित्व है। यदि वर्ग पहले से ही __repr__() को परिभाषित करता है, तो इस पैरामीटर को अनदेखा कर दिया जाता है।
eq तर्क डिफ़ॉल्ट रूप से true है। यह __eq__() मेथड को ऑटो-जेनरेट करेगा। इस विधि को बराबर तुलना ऑपरेटर (==) के जवाब में बुलाया जाता है। दोबारा, यदि वर्ग पहले से ही __eq__() को परिभाषित करता है, तो इस पैरामीटर को अनदेखा कर दिया जाता है।
यदि 'ऑर्डर' पैरामीटर सत्य है (डिफ़ॉल्ट गलत है), तुलना के लिए जादुई तरीके, __lt__(), __le__(), __gt__(), और __ge__() विधियां स्वचालित रूप से उत्पन्न होंगी, वे तुलना ऑपरेटरों को लागू करती हैं <<=> उत्तर>=क्रमशः। यदि आदेश सत्य है और eq गलत है, तो एक ValueError उठाया जाता है। यदि वर्ग पहले से ही इनमें से किसी भी तरीके को परिभाषित करता है), तो इसका परिणाम TypeError में होता है।
असुरक्षित_हैश तर्क अगर गलत (डिफ़ॉल्ट), एक __hash__() विधि उत्पन्न होती है जिसके अनुसार eq और फ्रोजन सेट होते हैं।
जमे हुए तर्क:यदि सही है (डिफ़ॉल्ट गलत है), केवल-पढ़ने के लिए जमे हुए उदाहरणों का अनुकरण करता है।
>>> from data_class import Student >>> s1=Student('Naveen', 21, 50.50) >>> s2=Student('Mangesh', 20, 50.00) >>> s1==s2 False
asdict()
यह फ़ंक्शन क्लास इंस्टेंस को डिक्शनरी ऑब्जेक्ट में कनवर्ट करता है।
>>> import dataclasses >>> dataclasses.asdict(s1) {'name': 'Naveen', 'age': 21, 'percent': 50.5}
आश्चर्य ()
यह फ़ंक्शन क्लास इंस्टेंस को टुपल ऑब्जेक्ट में बदल देता है।
>>> dataclasses.astuple(s2) ('Mahesh', 20, 50.0)
make_dataclass()
यह फ़ंक्शन फ़ील्ड तर्क के रूप में दिए गए टुपल्स की सूची से एक नया डेटाक्लास बनाता है।
>>> NewClass=dataclasses.make_dataclass('NewClass', [('x',int),('y',float)]) >>> n = NewClass(10,20) >>> n NewClass(x=10, y=20)