Python:创建动态函数

2024-10-02 12:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我想在哪里创建动态函数,它将根据从数据库中检索到的值进行一些计算,我很清楚我的内部计算,但问题是如何创建动态类:

我的结构是这样的:

class xyz:

    def Project():

       start = 2011-01-03

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

现在要动态生成那些all PhaseX()函数,所以有人可以建议我 如何使用Python代码实现这种功能

等待肯定答复 当做 谢谢你


Tags: 函数project数据库def动态all结构start
3条回答

我最近也遇到过同样的问题,我想用最初的例子写下我发现对我有用的东西。与前面的答案不同的是,我使用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'

这个答案可能是假设您的意图过于简单,但似乎您想要为特定的函数调用设置一个值。

你能考虑一下这样的事情吗?

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

closures

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

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

caveats

相关问题 更多 >

    热门问题