मैं वर्तमान में पुस्तकालय से एक वर्ग की संपत्ति को अधिक बहुमुखी बनाने के लिए पैच कर रहा हूं।संपत्ति क्यों है। केवल पढ़ने योग्य विशेषता प्राप्त करें?
मैं निम्नलिखित कोड है जो ठीक काम करता है का उपयोग करते हुए इस कर रहा हूँ:
_orig_is_xhr = BaseRequest.is_xhr.fget
_orig_is_xhr_doc = BaseRequest.is_xhr.__doc__
BaseRequest.is_xhr = property(lambda self: _orig_is_xhr(self) or
'_iframe-xhr' in request.form, doc=_orig_is_xhr_doc)
हालांकि, यह बहुत अच्छा होगा अगर मैं बस गेटर समारोह इतना docstring संरक्षित है के ऊपर लिख सकता है:
_orig_is_xhr = BaseRequest.is_xhr.fget
BaseRequest.is_xhr.fget = lambda self: (_orig_is_xhr(self) or
'_iframe-xhr' in request.form)
यह काम नहीं करता है क्योंकि property.fget
केवल पढ़ने योग्य विशेषता है (TypeError: readonly attribute
इसे असाइन करने का प्रयास करते समय)। मुझे उत्सुकता है कि इसके लिए कोई विशेष कारण है या यह पाइथन डेवलपर्स ने सोचा है कि इसे किसी नए के साथ बदलने के बिना इसे बनाने के बाद किसी संपत्ति को संशोधित करने का कोई मतलब नहीं है।
हे, अच्छा - मैं अजगर हैक करने नहीं जा रहा हूँ स्रोत हालांकि: पी – ThiefMaster
बेशक :-) मैं बस यह इंगित कर रहा था कि केवल पढ़ने-पढ़ने के पीछे कुछ और विदेशी नहीं है। – samplebias
उत्परिवर्तनीय गुण अनजाने दुष्प्रभावों के लिए कुछ डरावने अवसर पैदा करेंगे। 'Thread.ident.fget = Thread.daemon.fget' कोई भी? – ncoghlan