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

2024-04-25 13:02:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

您想创建它的一个实例,但只提供fname和imobj输入。正确的方法是

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

或者有没有更好的方式打这个电话?你知道吗


Tags: 实例方法nameselfnonedatainitdef
2条回答

您可以实例化:

thing = Thing(f_name, imobj=im_obj)

其他命名参数将设置为默认值。你知道吗

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

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

这将解压dict值。见keyword arguments。你知道吗

你可以这样做:

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

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

thing = Thing(value1, im_obj=value2)

但我个人认为第一种解决方案更具可读性。很明显,我们只更改f_nameim_obj的值,而将其他所有参数保留为其默认值。此外,它使人们不想知道value1将被分配给什么参数。你知道吗

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

相关问题 更多 >