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

December 26, 2009 - 11:06
#1432

อ่านๆมาแล้ว รู้สึกพี่กำลังพยายามจะ 'overload' ฟังก์ชันใน Python รึเปล่าครับ ?

ไปอ่านกระทู้นี้ (http://stackoverflow.com/questions/682504/what-is-a-clean-pythonic-way-to-have-multiple-constructors-in-python) มาแล้วรู้สึกที่ทำมาคงดีสุดแล้ว (มั้ง)

wiennat
December 27, 2009 - 08:21
#1433

@m3rlinez น่าจะเป็น overload แต่ว่ามันน่าจะ override แทนที่ของเดิมไปด้วยน่ะ เพราะพยายามจะเอาไปใช้กับ constructor นั่นแหละ

ที่บอกว่าไม่สวยเพราะมันต้องเป็น named parameter

Post new comment

The content of this field is kept private and will not be shown publicly.