मेरे पास एक कक्षा है जो __getattr__
का उपयोग करके आभासी विशेषताओं को लागू करती है। गुण महंगा हो सकते हैं, उदा। एक प्रश्न प्रदर्शन अब, मैं एक लाइब्रेरी का उपयोग कर रहा हूं जो जांचता है कि वास्तव में इसे प्राप्त करने से पहले मेरे ऑब्जेक्ट में विशेषता है या नहीं।विशेषता मूल्य को पुनः प्राप्त करने से हैशर को कैसे रोकें
परिणामस्वरूप, एक प्रश्न के बजाय दो बार निष्पादित किया जाता है। बेशक यह वास्तव में यह जानने के लिए __getattr__
निष्पादित करने के लिए समझ में आता है कि विशेषता मौजूद है या नहीं।
class C(object):
def __getattr__(self, name):
print "I was accessed"
return 'ok'
c = C()
hasattr(c, 'hello')
क्या इसे रोकने के लिए कोई तरीका है?
यदि पायथन __hasattr__
का समर्थन करता है तो मैं बस जांच सकता हूं कि क्वेरी मौजूद है या नहीं, वास्तव में इसे चलाने का विरोध किया है।
मैं एक कैश बना सकता हूं, लेकिन यह भारी है क्योंकि एक क्वेरी में पैरामीटर हो सकते हैं। बेशक, सर्वर स्वयं प्रश्नों को कैश कर सकता है और समस्या को कम कर सकता है, लेकिन यदि क्वेरी बहुत सारे डेटा लौटाती है तो यह अभी भी भारी है।
कोई विचार?
यदि मैं स्थिति को सही समझता हूं, तो आपको केवल 'नाम' के आधार पर कैश करने की आवश्यकता है, ताकि यह केवल एक शब्दकोश हो। बीटीडब्ल्यू, आप इसे एक विशेषता की तरह क्यों दिखाना चाहते हैं? – bereal
यदि ऑब्जेक्ट क्वेरी का समर्थन नहीं करता है तो आप क्या करना चाहते हैं? – Shashank
'हैशट' एक विशेषता के लिए हल्के वजन परीक्षण नहीं है; यह 'getattr' को अनिवार्य रूप से 'try: getattr (' name ') की तरह कहते हैं; विशेषताएँ को छोड़कर: झूठी वापसी; अन्य: सही वापस लौटें। – chepner