Add a new argument to Python function
ถึงจะตั้งชื่อว่าเพิ่มอาร์กิวเมนท์ให้ฟังก์ชัน เอาเข้าจริงๆก็ไม่รู้เหมือนกันว่าที่ทำนี่มันจะเรียกว่าอะไร
ปัญหาของผมคือผมต้องการเพิ่มการทำงานให้ฟังก์ชันที่มีอยู่แล้วโดยไม่เขียนขึ้นมาใหม่แต่ใช้วิธีเขียนครอบเอา สมมติว่ามีฟังก์ชันอยู่ 1 ฟังก์ชั่น ให้ชื่อว่าเป็น ฟังก์ชัน foo มีรายละเอียดของฟังก์ชันดังนี้
def foo(m,s,g):
print m, s, g
ทีนี้ถ้าเราอยากเขียนฟังก์ชัน bar ขึ้นมาโดยเราอยากให้มันทำงานอะไรซักอย่างด้วย โดยครอบฟังก์ชัน foo เอาไว้อีกที เราจะใช้วิธีประกาศหัวฟังก์ชันให้เหมือน foo ก็ได้ แต่ว่าเราก็ทำแบบนี้ก็ได้เหมือนกัน
def bar(*args, **kwargs):
if 'a' in kwargs:
print kwargs['a'],
del kwargs['a']
foo(*args, **kwargs)
ลองรันดูได้ดังนี้
>>> bar(a='asfd',m='afsd', s='s', g='g')
asfd afsd s g
แอบดูน่าเกลียดนิดนึงแต่ก็แก้ปัญหาผมได้แล้ว ใครมีวิธีอะไรที่ดีกว่านี้ช่วยชี้แนะด้วยครับ

Comments
อ่านๆมาแล้ว รู้สึกพี่กำลังพยายามจะ 'overload' ฟังก์ชันใน Python รึเปล่าครับ ?
ไปอ่านกระทู้นี้ (http://stackoverflow.com/questions/682504/what-is-a-clean-pythonic-way-to-have-multiple-constructors-in-python) มาแล้วรู้สึกที่ทำมาคงดีสุดแล้ว (มั้ง)
@m3rlinez น่าจะเป็น overload แต่ว่ามันน่าจะ override แทนที่ของเดิมไปด้วยน่ะ เพราะพยายามจะเอาไปใช้กับ constructor นั่นแหละ
ที่บอกว่าไม่สวยเพราะมันต้องเป็น named parameter
Post new comment