我想创建具有相似结构的多个功能。并且一一列出它们似乎并不聪明,因为它显然违反了“不要重复自己做”的原则。
这种情况使得我有一个数组function_names = ["func1", "func2", … , "func10"]
。另外,我想在这些函数中使用不同的操作执行if,elif和else语句。这些函数在一个类中。目的是简化这种结构
class MainClass:
def func1(self):
if condition_a:
return action1(parameter1)
elif condition_b:
return random_action1(random_parameter1)
else:
print("There is something wrong inside func1")
def func2(self):
if condition_a:
return action2(parameter2)
elif condition_b:
return random_action2(random_parameter2)
else:
print("There is something wrong inside func2")
# Same structure of functions goes on
条件condition_a
和condition_b
是不变的。
答案 0 :(得分:2)
您可以简单地将函数传递给函数并执行回调:
def generic_func(action, random_action, parameter, random_parameter):
if condition_a:
return action(parameter)
elif condition_b:
return random_action(random_parameter)
else:
print("There is something wrong")
答案 1 :(得分:0)
您可以编写返回函数的函数:
class MainClass():
action1 = None
random_action1 = None
def mother_func(action, random_action):
def func(self):
if condition_a:
return action(self.parameter)
elif condition_b:
return random_action(self.random_parameter)
else:
print("There is something wrong inside func")
return func
func1 = mother_func(action1, random_action1)
答案 2 :(得分:0)
我会使用一个字典,该字典将映射您想对action1
和random_action1
以及您的参数等等进行的操作...
class MainClass:
action1 = lambda x: ()
random_action_1 = lambda x: ()
parameter1 = 0
random_parameter1 = 1
action2 = lambda x: ()
random_action_2 = lambda x: ()
parameter2 = 0
random_parameter2 = 1
handler = {
'func1' : {
'action': action1,
'random_action': random_action_1,
'parameter': parameter1,
'random_parameter': random_parameter1
},
'func2': {
'action': action2,
'random_action': random_action_2,
'parameter': parameter2,
'random_parameter': random_parameter2
},
}
def gfunc(self, func):
if condition_a:
return self.handler[func]['action'](self.handler[func]['parameter'])
elif condition_b:
return self.handler[func]['random_action'](self.handler[func]['random_parameter'])
else:
print("There is something wrong inside {}".format(func))
您可以在类之外定义handler
并将其用作外包,您的“参数” 和“操作” 也是如此。