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])
Таким образом, одинДостаточно взглянуть на сигнатуру метода, чтобы понять, для чего нужны карги.
В общем, я считаю, что соглашение - это хорошая вещь.Однако мне кажется, что всегда использование args
и kwargs
- упущенная возможность донести полезную информацию до пользователя API о природе аргументов функции / метода и kwargs.В конце концов, тот факт, что они являются неназванными или именованными аргументами, становится понятным благодаря наличию одинарной или двойной звездочки.
Есть ли у кого-нибудь примеры альтернативных имен для args и kwargs, используемых в реальном мире,код для нескольких разработчиков или просто слишком сложно использовать другие имена переменных для этих конструкций?
Если на самом деле это просто ужасная, ужасная идея - не использовать эти условные имена, в чем причина?