2009-03-26 9 views
5

मैं पायथन में एक गेम प्रोग्रामिंग कर रहा हूं, जहां सभी आईओ गतिविधियों को आईओ ऑब्जेक्ट द्वारा किया जाता है (उम्मीद है कि उस ऑब्जेक्ट को दूसरे के लिए स्वैप करना आसान होगा जो एक अलग यूजर इंटरफेस लागू करता है)। गेम में लगभग सभी अन्य ऑब्जेक्ट्स को आईओ सिस्टम को किसी बिंदु पर एक्सेस करने की आवश्यकता होती है (उदाहरण के लिए एक संदेश प्रिंट करना, प्लेयर की स्थिति अपडेट करना, इन-गेम एक्शन के कारण विशेष प्रभाव दिखाना), इसलिए मेरा सवाल यह है:पायथन गेम प्रोग्रामिंग: क्या मेरा आईओ ऑब्जेक्ट वैश्विक चर होने के लिए एक वैध उम्मीदवार है?

क्या यह आईओ ऑब्जेक्ट के संदर्भ में विश्व स्तर पर उपलब्ध होने के संदर्भ में समझ में आता है?

विकल्प आईओ ऑब्जेक्ट को संदर्भित करने के लिए आवश्यक प्रत्येक ऑब्जेक्ट के __init__() में संदर्भ पारित कर रहा है। मैं समझता हूं कि यह एक परीक्षण बिंदु से अच्छा है, लेकिन क्या यह परिणामस्वरूप "फ़ंक्शन हस्ताक्षर प्रदूषण" के लायक है?

धन्यवाद।

+0

मुझे उम्मीद है कि आप वास्तव में एक ही इंटरफ़ेस को एक अलग कार्यान्वयन प्रदान करने वाले आपके आईओ ऑब्जेक्ट को स्वैप कर देंगे। :) – chaos

+0

हां, मुझे स्पष्ट होना चाहिए था; मैंने उपयोगकर्ता इंटरफ़ेस का अर्थ इंटरफ़ेस शब्द का उपयोग किया :) –

+0

@ जेम्स: कृपया अपना प्रश्न ठीक करें। –

उत्तर

9

हां, यह वैश्विक चर का एक वैध उपयोग है। यदि आप नहीं चाहते हैं, तो इस वैश्विक वस्तु के समतुल्य एक संदर्भ ऑब्जेक्ट को पास करना एक और विकल्प है, जैसा आपने बताया है।

के बाद से मैं तुम्हें, एक से अधिक फ़ाइलों (मॉड्यूल) का उपयोग कर रहे क्यों की तरह कुछ भी नहीं मान: यह एक आम तरीका कार्यक्रम है कि और अधिक जटिल मैं है

import io 
io.print('hello, world') 
io.clear() 

/ओ सरल मुद्रण से की जरूरत है की तरह बातें करते हैं लॉगिंग।

+0

+1: वास्तव में "वैश्विक" नहीं, बल्कि एक मॉड्यूल वैश्विक, जो अब तक बहुत बेहतर है। यह सिंगलटन है। –

1

हाँ, मुझे ऐसा लगता है।

एक और संभावना मॉड्यूल loggerModule बनाने के लिए होगी जिसमें print() और write() जैसे फ़ंक्शन हैं, लेकिन यह केवल मामूली रूप से बेहतर होगा।

0

नहीं।

वैरिएबल वैश्विक नामस्थान में चारों ओर पारित होने के लिए बहुत विशिष्ट हैं। उन्हें स्थैतिक कार्यों/कक्षाओं के अंदर छुपाएं जो दौड़ समय पर उन्हें जादू की चीजें कर सकते हैं (या अन्य लोगों को पूरी तरह से कॉल करें)।

विचार करें कि क्या होता है यदि आईओ समय-समय पर राज्य बदल सकता है या यदि इसे थोड़ी देर के लिए अवरुद्ध करने की आवश्यकता है (जैसे कई सॉकेट करते हैं)।

विचार करें कि क्या होता है यदि कोड का एक ही ब्लॉक कई बार शामिल किया गया हो। क्या परिवर्तनीय उदाहरण डुप्लीकेट भी मिलता है?

विचार करें कि क्या होता है यदि आप एक ही चर के संस्करण 2 चाहते हैं। क्या होगा यदि आप अपना इंटरफ़ेस बदलना चाहते हैं? क्या आपको संदर्भित सभी कोड को संशोधित करना है?

क्या यह वास्तव में उन सभी कोडों को संक्रमित करने के लिए समझ में आता है जो वैरिएबल का उपयोग उन सभी तरीकों से ज्ञान के साथ करते हैं जो खराब हो सकते हैं?

संबंधित मुद्दे