आइए किसी भी उपयोगकर्ता द्वारा परिभाषित पायथनिक वर्ग पर विचार करें।बिल्ट-इन फ़ंक्शन को संशोधित करना
['__class__', '__delattr__', '__dict__', '__dir__', ... '__weakref__', 'bases',
'build_full_name', 'candidates', ... 'update_name'].
आप विशेषताओं के 2 प्रकार देख सकते हैं इस सूची में:
- निर्मित गुण,
- उपयोगकर्ता परिभाषित अगर मैं
dir(obect_of_class)
कहते हैं, मैं अपनी विशेषताओं की सूची मिलता है।
मुझे __dir__
ओवरराइड करने की आवश्यकता है, ताकि यह केवल उपयोगकर्ता परिभाषित attribltes को वापस कर सके। मैं यह कैसे कर सकता हूँ?
यह स्पष्ट है कि अगर ओवरराइड फ़ंक्शन में मैं स्वयं को कॉल करता हूं, तो यह मुझे अनंत रिकर्सन देता है। तो, मैं इस तरह somethig करना चाहता हूँ:
def __dir__(self):
return list(filter(lambda x: not re.match('__\S*__', x), dir(self)))
लेकिन अनंत रिकर्सन से बचें।
सामान्य रूप से, मैं एक अंतर्निहित फ़ंक्शन को कैसे संशोधित कर सकता हूं यदि मैं इसे स्क्रैच से नहीं लिखना चाहता हूं लेकिन मौजूदा फ़ंक्शन को संशोधित करना चाहता हूं?
क्या आपने इसके बजाय 'dir (className) 'का उपयोग करने का प्रयास किया था? – DainDwarf