python function argument

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

แอบดูน่าเกลียดนิดนึงแต่ก็แก้ปัญหาผมได้แล้ว ใครมีวิธีอะไรที่ดีกว่านี้ช่วยชี้แนะด้วยครับ