Python 不限制参数的名称,但是有些参数名称严格遵守约定,例如self
, cls
, args
, and kwargs
。名字self
and cls
总是代表相同的概念,因此在这些情况下,我很难找到令人信服的理由让某人偏离惯例。和args
and kwargs
然而,我发现这种命名约定令人窒息。
假设我有一个类,它具有可以通过将 kwargs 传递给其构造函数来设置的各种属性:
class MyObj:
def __init__(self, **kwargs):
for propname in kwargs:
self.set_property(propname, kwargs[propname])
在这种情况下,kwargs 只是该类实例的可设置属性,因此对我来说,将定义编写如下是有意义的:
class MyObj:
def __init__(self, **properties):
for propname in properties:
self.set_property(propname, properties[propname])
这样,人们只需查看方法的签名即可了解 kwargs 的用途。
一般来说,我认为约定俗成是一件好事。然而,在我看来,总是使用args
and kwargs
错失了向 API 用户传达有关函数/方法的 args 和 kwargs 性质的有用信息的机会。毕竟,它们是未命名或命名参数的事实已经通过单星号或双星号的存在而清楚地表明了。
有没有人有在现实世界的多开发人员代码中使用 args 和 kwargs 的替代名称的示例,或者为这些构造使用其他变量名称是否太违反规则?
如果不使用这些传统名称确实是一个非常非常可怕的想法,那么原因是什么?