मुझे पता है कि पाइथन ओवरलोडिंग के तरीके का समर्थन नहीं करता है, लेकिन मैं एक ऐसी समस्या में चला गया हूं जिसे मैं एक अच्छा पाइकोनिक तरीके से हल नहीं कर सकता।
मैं एक ऐसा खेल बना रहा हूं, जहां एक चरित्र को विभिन्न प्रकार की गोलियों की शूटिंग करने की आवश्यकता होती है, लेकिन मैं इन गोलियों को बनाने के लिए विभिन्न कार्यों को कैसे लिखूं? उदाहरण के लिए मान लीजिए कि मेरे पास एक फंक्शन है जो एक गति से बिंदु A से B तक यात्रा करने वाली बुलेट बनाता है। मैं इस तरह से एक फ़ंक्शन लिखूंगा:
def add_bullet(sprite, start, headto, speed):
... Code ...
लेकिन मैं बुलेट बनाने के लिए अन्य कार्य लिखना चाहता हूं जैसे:
def add_bullet(sprite, start, direction, speed):
def add_bullet(sprite, start, headto, spead, acceleration):
def add_bullet(sprite, script): # For bullets that are controlled by a script
def add_bullet(sprite, curve, speed): # for bullets with curved paths
... And so on ...
और बहुत सारे बदलावों के साथ। क्या इतने सारे खोजशब्द तर्कों का उपयोग किए बिना इसे करने का एक बेहतर तरीका है, इसके थोड़े बदसूरत होने का कारण है। प्रत्येक कार्य का नाम बदल रहा है क्योंकि आप या तो मिल भी बहुत बुरा है add_bullet1
, add_bullet2
या add_bullet_with_really_long_name
।
कुछ उत्तरों को संबोधित करने के लिए:
नहीं, मैं एक बुलेट क्लास पदानुक्रम नहीं बना सकता क्योंकि यह बहुत धीमा है। गोलियों के प्रबंधन के लिए वास्तविक कोड C में है और मेरे कार्य C API के आसपास के रैपर हैं।
मुझे पता है कि कीवर्ड तर्कों के बारे में है, लेकिन सभी प्रकार के मापदंडों के संयोजन के लिए जाँच करना कष्टप्रद हो रहा है, लेकिन डिफ़ॉल्ट तर्क जैसे आवंटन में मदद करते हैं
acceleration=0
default value + if + else
C ++ do के समान करने के लिए उपयोग करना होगा। यह उन कुछ चीजों में से एक है जो C ++ में पायथन की तुलना में बेहतर पठनीयता है ...
script, curve
हैं, क्या उनके पास एक सामान्य पूर्वज है, वे किन तरीकों का समर्थन करते हैं। बत्तख-टाइपिंग के साथ, यह वर्ग डिजाइन के लिए आपके ऊपर है कि वे किन तरीकों का समर्थन करें। संभवतया Script
किसी प्रकार के टाइमस्टेप-आधारित कॉलबैक का समर्थन करता है (लेकिन क्या वस्तु वापस आनी चाहिए? उस टाइमस्टैप पर स्थिति? उस टाइमस्टेप पर प्रक्षेपवक्र?)। संभवतया start, direction, speed
और start, headto, spead, acceleration
दोनों प्रकार के प्रक्षेपवक्रों का वर्णन करते हैं, लेकिन फिर से यह आप पर निर्भर है कि वे किस तरह से उन्हें खोलना और उन्हें संसाधित करना जानते हैं।