如何处理Python __init__中的缺失参数?
在一个多线程的程序中,我需要生成很多指令,然后把它们传给一个单独的处理线程。这里是我自定义的 Instruction 类:
class instruction:
priority = 10
action = ""
data = ""
condition = ""
target = ""
### constructor(s) declaration
def __init__(self,priority=10,target="",action="",data="",condition=""):
self.priority = priority
self.target = target
self.action = action
self.data = data
self.condition = condition
我需要调用不同类型的指令,所以定义的参数可能会有所不同。总是会缺少一个参数,比如没有目标、没有动作等等。
根据现在的构造函数,如果我在没有目标的情况下调用它,我会得到这样的结果:
i = instruction(priority_value,action_value,data_value,condition_value)
print(i.priority)
>>> priority_value
print(i.target)
>>> action_value
print(i.action)
>>> data_value
print(i.target)
>>> data_value
print(i.data)
>>> condition_value
print(i.condition)
>>> #nothing to see here, move along!
我知道我可以定义自定义的构造函数,比如:
@classmethod
def noTarget(priority=10,action=0,data="",condition=""):
return instruction(priority,"",action,data,condition)
然后我可以这样调用它:i=instruction.noTarget(priority_value,action_value,data_value,condition_value)
但是,还有其他方法可以做到这一点吗?
如果有的话,能详细说明一下吗?谢谢!
抱歉如果我用了错误的词或者拼写错误,英语不是我的母语。
2 个回答
1
传递关键字参数。
i = instruction(priority=priority_value,
action=action_value,
data=data_value,
condition=condition_value)
6
在你定义的函数里,所有的参数都是可选的,因为它们被设置为默认参数,所以你不需要为每个参数都传入值。
当你调用这个函数时,只需要指定你想传入的参数,这些参数叫做关键字参数:
instruction(priority=priority_value, action=action_value,
data=data_value, condition=condition_value)
使用关键字参数时,顺序是无所谓的,你可以随意混合它们。
你还可以查看Python教程中的关键字参数部分。