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