मैं पायथन में एक गेम लिख रहा हूं और मैं अपने कोड को फिर से डिजाइन करने के बारे में कुछ सलाह ढूंढ रहा हूं। गेम इकाई के लिए आंदोलन घटक की परिभाषा नीचे दी गई है।
लोड फ़ंक्शन एक प्रॉपर्टी ट्री ऑब्जेक्ट लेता है और तदनुसार self
की विशेषताओं को सेट करता है। सेव फ़ंक्शन इसके विपरीत करता है: self
की विशेषताओं के आधार पर, एक प्रॉपर्टी ट्री उत्पन्न होती है और वापस आती है।
class Movement(EntityComponent):
def __init__(self):
# Default values
self.speed = 0
self.acceleration = 0
def load(self, properties):
self.speed = int(properties['Speed'])
self.acceleration = int(properties['Acceleration'])
def save(self):
pt = PropertyTree()
pt['Speed'] = str(self.speed)
pt['Acceleration'] = str(self.acceleration)
return pt
कोड के साथ समस्या यह है कि बहुत सारी सूचनाओं का दोहराव चल रहा है। सबसे पहले, मैं प्रॉपर्टीट्री में कुंजियों को self
की विशेषताओं के साथ संबद्ध करने वाली जानकारी की नकल करता हूं, और मैं स्वयं कुंजियों की नकल भी करता हूं ('Speed'
और 'Acceleration'
तार दो बार दिखाई देते हैं)। जाहिर है, गलतियों के लिए बहुत जगह है।
मैं इसे कैसे दोबारा कर सकता हूं?
1 उत्तर
शुरुआती बिंदु के रूप में:
class Movement(EntityComponent):
def __init__(self):
# Default values
self.speed = 0
self.acceleration = 0
serializable_fields = [
('speed', int),
('acceleration', int)
]
def load(object, source):
for name, field_type in object.serialiable_fields:
settarr(object, name, field_type(source[name]))
def save(object):
target = PropertyTree()
for name, field_type in object.serializable_fields:
target[name] = str(getattr(object, name))
return target
मूल रूप से, एक अलग सेव/लोड सिस्टम बनाएं, शायद EntityComponent वर्ग में। सिस्टम को वर्तमान ऑब्जेक्ट को क्रमबद्ध करने का तरीका बताने के लिए फ़ील्ड के लिए डेटा की सूची प्रदान करें।
यदि आप इससे परिचित नहीं हैं, तो आप यह भी देख सकते हैं कि पायथन का अचार मॉड्यूल कैसे काम करता है। मैं तुच्छ मामलों से परे किसी भी चीज़ के लिए इसका उपयोग करने की अनुशंसा नहीं करता, लेकिन यह आपको कुछ विचार दे सकता है।
('speed', int, 0)
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।