假设您有一个Python类,其构造函数如下所示:
def __init__(self,fname=None,data=[],imobj=None,height=0,width=0):
并且您想要创建它的实例但只提供fname和imobj输入。这样做的正确方法是
thing = Thing(f_name, None, im_obj, None, None)
还是有一种打电话的首选方式吗?
答案 0 :(得分:6)
你可以这样做:
thing = Thing(f_name=value1, im_obj=value2)
请注意,在这种情况下,您实际上并不需要<{em> f_name=
,因为fname
是第一个参数(除self
之外,它是隐式传递的)。你可以这么做:
thing = Thing(value1, im_obj=value2)
但我个人认为第一种解决方案更具可读性。它清楚地表明,我们只是更改f_name
和im_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。