ฉันรู้ว่า Python ไม่รองรับการบรรทุกเกินพิกัด แต่ฉันพบปัญหาที่ฉันไม่สามารถแก้ไขได้ด้วยวิธี Pythonic ที่ดี
ฉันกำลังสร้างเกมที่ตัวละครต้องยิงกระสุนหลากหลายแบบ แต่ฉันจะเขียนฟังก์ชั่นต่าง ๆ เพื่อสร้างกระสุนได้อย่างไร ตัวอย่างเช่นสมมติว่าฉันมีฟังก์ชั่นที่สร้างสัญลักษณ์แสดงหัวข้อย่อยเดินทางจากจุด 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
วิธีตอบคำถาม:
ไม่ฉันไม่สามารถสร้างลำดับชั้นของ Bullet เพราะนั่นช้าเกินไป รหัสจริงสำหรับการจัดการสัญลักษณ์แสดงหัวข้อย่อยอยู่ใน C และฟังก์ชั่นของฉันห่อรอบ C API
ฉันรู้เกี่ยวกับอาร์กิวเมนต์ของคำหลัก แต่การตรวจสอบการรวมกันของพารามิเตอร์ทุกประเภทกำลังเริ่มน่ารำคาญ แต่อาร์กิวเมนต์เริ่มต้นช่วยได้เช่นกัน
acceleration=0
default value + if + else
เพื่อทำเช่นเดียวกับ C ++ ทำ นี้เป็นหนึ่งในไม่กี่สิ่งที่ C ++ มีการอ่านดีกว่างูหลาม ...
script, curve
ใดพวกเขามีบรรพบุรุษร่วมกันพวกเขาสนับสนุนวิธีใด ด้วยการพิมพ์เป็ดมันขึ้นอยู่กับคุณสำหรับการออกแบบชั้นเรียนเพื่อหาวิธีที่พวกเขาต้องการการสนับสนุน สันนิษฐานว่าScript
สนับสนุนการโทรกลับตามการประทับเวลาบางประเภท (แต่วัตถุใดที่ควรส่งคืนตำแหน่งที่การประทับเวลานั้นหรือเส้นทางการเคลื่อนที่ในการประทับเวลานั้น) สันนิษฐานstart, direction, speed
และstart, headto, spead, acceleration
ทั้งสองอธิบายประเภทของวิถี แต่อีกครั้งก็ขึ้นอยู่กับคุณในการออกแบบชั้นรับที่จะรู้วิธีที่จะแกะพวกเขาและประมวลผลพวกเขา