ฉันมีฟังก์ชั่น Python ซึ่งใช้อาร์กิวเมนต์หลายตัว อาจมีการข้ามข้อโต้แย้งบางอย่างในบางสถานการณ์
def some_function (self, a, b, c, d = None, e = None, f = None, g = None, h = None):
#code
ข้อโต้แย้งd
ผ่านh
คือสตริงที่แต่ละอันมีความหมายต่างกัน เป็นสิ่งสำคัญที่ฉันสามารถเลือกพารามิเตอร์ทางเลือกที่จะผ่านในชุดค่าผสมใด ๆ ตัวอย่างเช่น(a, b, C, d, e)
หรือ(a, b, C, g, h)
หรือ(a, b, C, d, e, f
หรือทั้งหมด (นี่คือตัวเลือกของฉัน)
มันจะดีมากถ้าฉันสามารถโอเวอร์โหลดฟังก์ชั่น - แต่ฉันอ่านว่า Python ไม่รองรับการโอเวอร์โหลด ฉันพยายามแทรกอาร์กิวเมนต์บางตัวที่จำเป็นในรายการ - และได้รับข้อผิดพลาดที่ไม่ตรงกัน
ตอนนี้ฉันกำลังส่งสตริงว่างแทนที่อาร์กิวเมนต์ที่หายไปสองสามตัวแรกเป็นตัวยึดตำแหน่ง ฉันต้องการจะเรียกใช้ฟังก์ชันโดยใช้ค่าจริง
มีวิธีการทำเช่นนี้? ฉันจะส่งรายการแทนรายการอาร์กิวเมนต์ได้หรือไม่
ตอนนี้ต้นแบบที่ใช้ ctypes ดูเหมือนว่า:
_fdll.some_function.argtypes = [c_void_p, c_char_p, c_int, c_char_p, c_char_p, c_char_p, c_char_p, c_char_p]