2024-04-25 13:02:39 发布
网友
假设您有一个Python类,其构造函数如下所示:
def __init__(self,fname=None,data=[],imobj=None,height=0,width=0):
您想创建它的一个实例,但只提供fname和imobj输入。正确的方法是
thing = Thing(f_name, None, im_obj, None, None)
或者有没有更好的方式打这个电话?你知道吗
您可以实例化:
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)。你可以这样做:
f_name=
fname
self
thing = Thing(value1, im_obj=value2)
但我个人认为第一种解决方案更具可读性。很明显,我们只更改f_name和im_obj的值,而将其他所有参数保留为其默认值。此外,它使人们不想知道value1将被分配给什么参数。你知道吗
f_name
im_obj
value1
而且,您几乎从不希望将列表之类的可变对象作为默认参数。它将在函数的所有调用中共享。有关详细信息,请参见"Least Astonishment" and the Mutable Default Argument
您可以实例化:
其他命名参数将设置为默认值。你知道吗
也可以将dict传递给构造函数:
这将解压dict值。见keyword arguments。你知道吗
你可以这样做:
注意,在这种情况下,实际上并不需要
f_name=
,因为fname
是第一个参数(除了隐式传递的self
)。你可以这样做:但我个人认为第一种解决方案更具可读性。很明显,我们只更改
f_name
和im_obj
的值,而将其他所有参数保留为其默认值。此外,它使人们不想知道value1
将被分配给什么参数。你知道吗而且,您几乎从不希望将列表之类的可变对象作为默认参数。它将在函数的所有调用中共享。有关详细信息,请参见"Least Astonishment" and the Mutable Default Argument
相关问题 更多 >
编程相关推荐