ในส่วนของ post ชุดนี้จึงนำเสนอวิธีการเรียก function ด้วย string มาแต่จำเป็นที่ string นั้น จะต้องเป็นชื่อเดียวกับ function นะครับ โดยตัวอย่างนี้มีอยู่สองวิธีครับ ตามด้านล่างเลย
สมมุติ code มีอยู่ว่า
class Test(object):
def __init__(self):
pass
def a(self, data):
print '--a-- %s' %str(data)
def b(self, data):
print '--b-- %s' %str(data)
def c(self, data):
print '--c-- %s' %str(data)
def call(self, fname, data):
if 'a' == fname:
self.a(data)
elif 'b' == fname:
self.b(data)
else:
self.c(data)
1. การใช้ eval() << เหมาะกับการใช้เรียกแบบตรง ๆ ซึ่งไม่จำเป็นว่า function ที่เรียกต้องอยู่ใน Object
def call(fname, data):
try:
eval('self.%s(data)' %fname)
except:
self.c(data) #default call function c
2. การใช้ getattr() << สะดวกมาก แต่ใช้ได้แต่กับ object เพราะต้องอ้าง attribute
def call(fname, data):
getattr(self, fname, 'c')(data)
และในกรณีใด ๆ ที่เราต้องการอ้างถึง object ตัวอื่น ก็สามารถแทนที่ของ self ครับ ไม่จำเป็นว่าต้องเรียกตัวเองเสมอไป
ค่อยข้างจะมีประโยชน์คนละแบบครับ แล้วแต่การใช้งาน