使用默认参数调用Python构造函数

时间:2014-12-12 23:05:29

标签: python function arguments

假设您有一个Python类,其构造函数如下所示:

 def __init__(self,fname=None,data=[],imobj=None,height=0,width=0):

并且您想要创建它的实例但只提供fname和imobj输入。这样做的正确方法是

thing = Thing(f_name, None, im_obj, None, None)

还是有一种打电话的首选方式吗?

2 个答案:

答案 0 :(得分:6)

你可以这样做:

thing = Thing(f_name=value1, im_obj=value2)

请注意,在这种情况下,您实际上并不需要<{em> f_name=,因为fname是第一个参数(除self之外,它是隐式传递的)。你可以这么做:

thing = Thing(value1, im_obj=value2)

但我个人认为第一种解决方案更具可读性。它清楚地表明,我们只是更改f_nameim_obj的值,同时将所有其他参数保留为其默认值。此外,它使人们不会想知道将分配哪个参数value1

此外,您几乎从不希望将列表等可变对象作为默认参数。它将在函数的所有调用中共享。有关详细信息,请参阅"Least Astonishment" and the Mutable Default Argument

答案 1 :(得分:0)

你可以使用:

进行实例化
thing = Thing(f_name, imobj=im_obj)

其他命名参数将设置为默认值。

您还可以将dict传递给构造函数:

>>> argDict={"fname": f_name, "imobj": im_obj}
>>> thing = Thing(**argDict)

这将解压缩dict值。请参阅keyword arguments