Python:创建动态函数

11 投票
4 回答
16804 浏览
提问于 2025-04-16 09:20

我遇到了一个问题,我想创建一个动态函数,这个函数会根据从数据库中获取的值进行一些计算。我对内部计算的部分很清楚,但我不太确定如何创建动态类。

我的结构大概是这样的:

class xyz:

    def Project():

       start = 2011-01-03

       def Phase1():
          effort = '2d'
       def Phase2():
          effort = '3d'
       def Phase3():
          effort = '4d'

现在我想动态生成所有的 PhaseX() 函数,有没有人能告诉我如何用 Python 代码实现这个呢?

期待积极的回复,感谢!

4 个回答

1

我最近也遇到了同样的问题,所以想把我找到的解决办法记录下来...使用原来的例子。跟之前的回答不同的是,我使用了setattr来把函数名(作为类的一部分)也包含进来。

class xyz(object):
    def __init__(self):
        # I wasn't clear how you were using effort...like this?
        self.effort = '0d'
    def add_phases(self, phase_dict): # Take a dictionary of phases and values
        for phase, value in phase_dict.items():
            self.make_phase(phase, value)
    def make_phase(self, phase, value):
        def somephase(self): # Create a closure like @Ignacio
            self.effort = str(value) + 'd'
        setattr(self.__class__, "Phase" + str(phase), somephase)

tracker = xyz()
phases = {1:2, 2:1, 3:6, 4:2}
tracker.add_phases(phases)
tracker.Phase3()
assert tracker.effort == '6d'
1

这个回答可能觉得你的想法太简单了,但看起来你是想为特定的函数调用设置一个值。

你有没有考虑过下面这样的做法呢?

def setEffort(n):
    effort = str(n)+'d' 
29

关于闭包的内容。

def makefunc(val):
  def somephase():
    return '%dd' % (val,)
  return somephase

Phase2 = makefunc(2)
Phase3 = makefunc(3)

注意事项

撰写回答