我目前正在尝试创建一个自动化的django模型实例化器。这个函数将需要几个参数,实例化一些django模型,将一些外键链接在一起,保存批次并将主模型返回给我。这一切都很好,但最后,该函数需要4个普通参数和2个元组(填充了一个内容类型名称和一个参数数组用于不同的函数调用)。
这导致以下函数def:
def create_rule(profile, lifestyles, bool, title, input, output):
rule = Rule.objects.create(
user_profile=profile,
lifestyles=lifestyles,
bool=bool,
title=title,
)
models = ContentType.objects.filter(app_label="rules")
input_cls = models.get(model=input[0]).model_class()
input_cls.objects.create(*input[1], rule=rule)
output_cls = models.get(model=output[0]).model_class()
output_cls.objects.create(*output[1], rule=rule)
return rule
平均函数调用可能看起来像这样:
create_rule(profile, '1,3,6,7', 1, "Switch off when 5:00",
('eventruleinput', [5, 'start']),
('propruleoutput', [35, 'Switch', 0]))
有没有一种很好的方法来减少我正在使用的参数数量(不是我猜)?是否有更好的方法来构造此函数调用?我这样做是完全错误的吗?
注意:这只是一个模型实现,我有点想知道我是否想要解决这个问题。
答案 0 :(得分:2)
有时候,一个函数需要采取很多论点。这没有任何问题,本身。以下是一些使它更清洁的提示:
不要将bool命名为“bool”:
def create_rule(profile, lifestyles, is_something, title, input, output):
rule = Rule.objects.create(
....
bool=is_something,
)
为了清晰起见打开你的元组:
input_val, input_command = input
input_cls = models.get(model=input_val).model_class()
input_cls.objects.create(*input_command, rule=rule)
output_val, output_command, output_third_arg = output
....