如何处理Python __init__中的缺失参数?

1 投票
2 回答
1695 浏览
提问于 2025-04-18 11:21

在一个多线程的程序中,我需要生成很多指令,然后把它们传给一个单独的处理线程。这里是我自定义的 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教程中的关键字参数部分

撰写回答