関数名が文字列として含まれるクラスの新しいメンバー関数を作成する最良の方法は何ですか? また、この新しい関数は、関数名が同じで引数が可変の別のオブジェクト (ヘルパー クラス) のパススルーにすぎません。これを実現するためにラムダを使用しますが、パススルー ラッパーが複数のステートメントになるシナリオを処理する方法がわかりません (これが私の要件です)。
# This is a helper class
class Compensation:
def bonus(self):
return 10000
def salary(self):
# Do something
def stack(self):
# Do something
# This is a employer class
class employee:
def __init__(self):
self.compensation = Compensation()
# This is a wrapper that creates the function
def passThru(funcName):
fn = "employee."+funcName+"=" + "lambda self, *arg: self.compensation." + funcName +"(*arg)"
exec(fn)
fnNames = ["bonus", "salary", "stocks"]
for items in fnNames: passThru(items)
emp = employee()
emp.bonus() # returns 1000