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

Rya*_*yan 0 python arguments function

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

 def __init__(self,fname=None,data=[],imobj=None,height=0,width=0):
Run Code Online (Sandbox Code Playgroud)

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

thing = Thing(f_name, None, im_obj, None, None)
Run Code Online (Sandbox Code Playgroud)

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

iCo*_*dez 6

你可以这样做:

thing = Thing(f_name=value1, im_obj=value2)
Run Code Online (Sandbox Code Playgroud)

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

thing = Thing(value1, im_obj=value2)
Run Code Online (Sandbox Code Playgroud)

但我个人认为第一种解决方案更具可读性.它清楚地表明,我们只是更改其值f_name并将im_obj其他所有参数保留为默认值.此外,它使人们不知道value1将分配什么参数.

此外,您几乎从不希望将诸如列表之类的可变对象作为默认参数.它将在函数的所有调用中共享.有关更多信息,请参阅"最小惊讶"和可变默认参数