Python:创建动态函数
我遇到了一个问题,我想创建一个动态函数,这个函数会根据从数据库中获取的值进行一些计算。我对内部计算的部分很清楚,但我不太确定如何创建动态类。
我的结构大概是这样的:
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)