मैं कक्षा में एक ध्रुव पर पायथन के @property
सजावट का उपयोग करने की कोशिश कर रहा हूं। विचार यह है कि मुझे एक निश्चित मूल्य चाहिए (इसे 'संदेश' कहते हैं) इसे एक्सेस करने के बाद साफ़ किया जाना चाहिए। लेकिन मुझे अंतिम सेट संदेश रखने के लिए एक और मूल्य भी चाहिए (इसे 'last_message' कहें), और इसे तब तक रखें जब तक कि कोई अन्य संदेश सेट न हो जाए। मेरे मन में, इस कोड काम करेगा:डिक्ट्स पर @property सजावट का उपयोग
>>> class A(object):
... def __init__(self):
... self._b = {"message": "",
... "last_message": ""}
... @property
... def b(self):
... b = self._b
... self._b["message"] = ""
... return b
... @b.setter
... def b(self, value):
... self._b = value
... self._b["last_message"] = value["message"]
...
>>>
हालांकि, यह प्रतीत नहीं होता:
>>> a = A()
>>> a.b["message"] = "hello"
>>> a.b["message"]
''
>>> a.b["last_message"]
''
>>>
मुझे यकीन है कि मैं गलत क्या किया है नहीं कर रहा हूँ? ऐसा लगता है कि @property
काम नहीं करता है जैसे कि मैं इसे डिक्ट्स पर उम्मीद करता हूं, लेकिन हो सकता है कि मैं कुछ और मूलभूत रूप से गलत कर रहा हूं?
इसके अलावा, मुझे पता है कि मैं कक्षा में व्यक्तिगत मूल्यों का उपयोग कर सकता हूं। लेकिन यह एक वेब अनुप्रयोग में एक सत्र के रूप में लागू किया गया है और मुझे इसे एक नियम होने की आवश्यकता है। मैं या तो यह काम कर सकता हूं, या पूरे सत्र ऑब्जेक्ट को इसे एक निर्देश का नाटक करने के लिए बना सकता हूं, या अलग-अलग चर का उपयोग कर सकता हूं और कोड कोड के बाकी हिस्सों में कार्यशीलता में हैक कर सकता हूं। मैं इसे काम करने के लिए बस इतना मिल जाएगा।
आपको नियमित रूप से 'dict' के बजाय अपने _question_ –
बीटीडब्लू में संपादित करने के बजाय अपने उत्तर को एक नए _ (self-) answer_ में डाल देना चाहिए, आपको [' __slots__ = ['message', 'last_message का उपयोग करने में रुचि हो सकती है '] '] (https://docs.python.org/2/reference/datamodel.html?highlight=slots#__slots__) यदि वे केवल दो (निश्चित) कुंजी हैं। या 'collections.namedtuple' –