【发布时间】:2018-12-07 20:12:24
【问题描述】:
Python 不限制参数的名称,但是某些参数名称严格遵守约定,例如self、cls、args 和kwargs。 self 和 cls 这两个名字总是代表同一个概念,所以在这些情况下,我很难找到一个令人信服的理由让某人改变惯例。但是,对于 args 和 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])
这样,只需查看方法的签名即可了解 kwarg 的用途。
一般来说,我相信约定是一件好事。但是,在我看来,总是使用args 和kwargs 是错失向API 用户传达有关函数/方法的args 和kwargs 性质的有用信息的机会。毕竟,单星号或双星号的存在已经清楚地表明了它们是未命名或命名参数的事实。
有没有人在现实世界的多开发人员代码中使用 args 和 kwargs 的替代名称的示例,或者为这些结构使用其他变量名称是否太不合时宜?
如果不使用这些传统名称真的只是一个可怕的想法,那是什么原因?
【问题讨论】:
标签: python naming-conventions keyword-argument