2

関数名が文字列として含まれるクラスの新しいメンバー関数を作成する最良の方法は何ですか? また、この新しい関数は、関数名が同じで引数が可変の別のオブジェクト (ヘルパー クラス) のパススルーにすぎません。これを実現するためにラムダを使用しますが、パススルー ラッパーが複数のステートメントになるシナリオを処理する方法がわかりません (これが私の要件です)。

# 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
4

3 に答える 3