शीर्ष-स्तरीय नामस्थान का उपयोग करना, यह असंभव है।जब आप
`var = 1`
चलाने यह कुंजी var
और वैश्विक शब्दकोश में मूल्य 1
संग्रहीत करता है। यह globals().__setitem__('var', 1)
पर कॉल करने के बराबर है। समस्या यह है कि आप वैश्विक शब्दकोश को एक चल रही स्क्रिप्ट में प्रतिस्थापित नहीं कर सकते हैं (संभवतः आप ढेर के साथ गड़बड़ कर सकते हैं, लेकिन यह एक अच्छा विचार नहीं है)। हालांकि आप द्वितीयक नेमस्पेस में कोड निष्पादित कर सकते हैं, और इसके ग्लोबल्स के लिए एक कस्टम शब्दकोश प्रदान कर सकते हैं।
class myglobals(dict):
def __setitem__(self, key, value):
if key=='val':
raise TypeError()
dict.__setitem__(self, key, value)
myg = myglobals()
dict.__setitem__(myg, 'val', 'protected')
import code
code.InteractiveConsole(locals=myg).interact()
यह एक आरईपीएल जो लगभग सामान्य रूप से चल रही है, लेकिन चर val
स्थापित करने के लिए किसी भी प्रयास से इनकार कर ऊपर सक्रिय हो जाएगा। आप execfile(filename, myg)
का भी उपयोग कर सकते हैं। ध्यान दें कि यह दुर्भावनापूर्ण कोड से सुरक्षा नहीं करता है।
उपयोग के मामले में क्या है? – msw
केस का उपयोग करें: लोग मेरी सेवा API का उपयोग करके छोटी स्क्रिप्ट लिखने जा रहे हैं, और मैं उन्हें आंतरिक डेटा बदलने से रोकना चाहता हूं और इस परिवर्तन को अगली लिपि में प्रचारित करना चाहता हूं। – Caruccio
पायथन स्पष्ट रूप से वादा करता है कि एक दुर्भावनापूर्ण या अज्ञानी कोडर को पहुंच से रोका जाएगा। अन्य भाषाएं आपको अज्ञानता के कारण कुछ प्रोग्रामर त्रुटि से बचने की अनुमति देती हैं, लेकिन लोगों के पास उनके चारों ओर कोड करने की अनोखी क्षमता है। – msw