मुझे आश्चर्य हुआ कि क्या वैश्विक चर का उपयोग करने के कुछ नुकसानों से बचना संभव होगा (देखें उदाहरण http://wiki.c2.com/?GlobalVariablesAreBad ) चर के मूल्यों को पारित करने के लिए एक वैश्विक / मॉड्यूल नामस्थान के बजाय एक वर्ग नामस्थान का उपयोग करके। । निम्न कोड इंगित करता है कि दो तरीके अनिवार्य रूप से समान हैं। नीचे बताए अनुसार क्लास नेमस्पेस का उपयोग करने में थोड़ा फायदा है।
निम्नलिखित कोड के टुकड़े यह भी बताते हैं कि विशेषताएँ या चर गतिशील रूप से वैश्विक / मॉड्यूल नामस्थान और वर्ग नामस्थान दोनों में बनाए और हटाए जा सकते हैं।
wall.py
# Note no definition of global variables
class router:
""" Empty class """
मैं इस मॉड्यूल को 'दीवार' कहता हूं क्योंकि इसका उपयोग चर को बंद करने के लिए किया जाता है। यह रिक्त स्थान 'राउटर' की वैश्विक चर और वर्ग-व्यापी विशेषताओं को अस्थायी रूप से परिभाषित करने के लिए एक स्थान के रूप में कार्य करेगा।
source.py
import wall
def sourcefn():
msg = 'Hello world!'
wall.msg = msg
wall.router.msg = msg
यह मॉड्यूल दीवार को आयात करता है और एक एकल फ़ंक्शन sourcefn
को परिभाषित करता है जो एक संदेश को परिभाषित करता है और इसे दो अलग-अलग तंत्रों द्वारा, एक ग्लोबल्स के माध्यम से और एक राउटर फ़ंक्शन के माध्यम से उत्सर्जित करता है। ध्यान दें कि चर wall.msg
और wall.router.message
उनके नामस्थानों में पहली बार परिभाषित किए गए हैं।
dest.py
import wall
def destfn():
if hasattr(wall, 'msg'):
print 'global: ' + wall.msg
del wall.msg
else:
print 'global: ' + 'no message'
if hasattr(wall.router, 'msg'):
print 'router: ' + wall.router.msg
del wall.router.msg
else:
print 'router: ' + 'no message'
यह मॉड्यूल एक फ़ंक्शन को परिभाषित करता है destfn
जो स्रोत द्वारा उत्सर्जित संदेशों को प्राप्त करने के लिए दो अलग-अलग तंत्रों का उपयोग करता है। यह इस संभावना के लिए अनुमति देता है कि चर 'msg' मौजूद नहीं हो सकता है। destfn
एक बार प्रदर्शित होने के बाद वे चर भी हटा देते हैं।
main.py
import source, dest
source.sourcefn()
dest.destfn() # variables deleted after this call
dest.destfn()
यह मॉड्यूल अनुक्रम में पहले से परिभाषित कार्यों को कॉल करता है। dest.destfn
चर के लिए पहली कॉल के बाद wall.msg
और wall.router.msg
अब मौजूद नहीं है।
कार्यक्रम से उत्पादन है:
वैश्विक: नमस्ते दुनिया!
राउटर: नमस्ते दुनिया!
वैश्विक: कोई संदेश
राउटर: कोई संदेश नहीं
उपरोक्त कोड अंशों से पता चलता है कि मॉड्यूल / वैश्विक और वर्ग / वर्ग चर तंत्र अनिवार्य रूप से समान हैं।
यदि बहुत सारे चर साझा किए जाने हैं, तो नामस्थान प्रदूषण को कई वॉल-टाइप मॉड्यूल, जैसे वॉल 1, वॉल 2 आदि का उपयोग करके या एकल फ़ाइल में कई राउटर-टाइप कक्षाओं को परिभाषित करके प्रबंधित किया जा सकता है। उत्तरार्द्ध थोड़ा टिडियर है, इसलिए शायद कक्षा-चर तंत्र के उपयोग के लिए सीमांत लाभ का प्रतिनिधित्व करता है।