मैं डेटाक्लास के लिए नया हूं और एक को एक शब्दकोश में बदलने का एक आसान तरीका बनाने की कोशिश कर रहा हूं, जिसके बाद मैं एक JSON फ़ाइल से सहेज और लोड कर सकता हूं। इससे पहले कि मैं अपने आवेदन के लिए आवश्यक बुनियादी ढांचे को लागू करूं, मैं इसे एक छोटे डेटाक्लास पर परीक्षण कर रहा हूं जिसमें वे चर हैं जिनके साथ मैं काम कर रहा हूं जो नीचे है:

from dataclasses import dataclass, asdict
@dataclass 
class TestClass:
    def __init__(self, floatA:[float], intA:[int], floatB:[float]):
        self.var1 = floatA
        self.var2 = intA
        self.var3 = floatB

    def ConvertToDict(self):
        return asdict(self)

test = TestClass([0.2,0.1,0.5], [1,2,3], [0.9,0.7,0.6])
print(asdict(test))
print(test.ConvertToDict())

दोनों प्रिंट स्टेटमेंट एक खाली डिक्शनरी '{}' हैं और मुझे समझ नहीं आ रहा है कि क्यों

1
FallingInForward 15 फरवरी 2021, 18:42
आपने कुछ भी एनोटेट नहीं किया और अपना खुद का init लागू किया।
 – 
juanpa.arrivillaga
15 फरवरी 2021, 19:17

1 उत्तर

सबसे बढ़िया उत्तर

__init__ पद्धति को ओवरराइड करके आप प्रभावी ढंग से dataclass डेकोरेटर को गैर-ऑप बना रहे हैं। मुझे लगता है कि आप चाहते हैं:

from dataclasses import dataclass, asdict
@dataclass 
class TestClass:
    floatA: float
    intA: int
    floatB: float

    def asdict(self):
        return asdict(self)

test = TestClass([0.2,0.1,0.5], [1,2,3], [0.9,0.7,0.6])
print(test)
print(test.asdict())

जो उत्पादन के रूप में उत्पादन करता है:

TestClass(floatA=[0.2, 0.1, 0.5], intA=[1, 2, 3], floatB=[0.9, 0.7, 0.6])
{'floatA': [0.2, 0.1, 0.5], 'intA': [1, 2, 3], 'floatB': [0.9, 0.7, 0.6]}

विवरण के लिए दस्तावेज देखें।

6
larsks 15 फरवरी 2021, 18:47
धन्यवाद। मुझे किसी कारण से दस्तावेज़ीकरण का वह हिस्सा याद आ गया
 – 
FallingInForward
15 फरवरी 2021, 18:56
1
आप अपनी खुद की init विधि जोड़ सकते हैं, लेकिन आपको अभी भी डेटाक्लास फ़ील्ड को वर्ग चर के रूप में घोषित करने की आवश्यकता है ताकि उन्हें पहचाना जा सके। उदाहरण: python.org/dev/peps/pep-0557 /#custom-init-method
 – 
mattficke
15 फरवरी 2021, 19:03