На самом деле, в обоих случаях вы можете передавать аргументы в качестве аргументов ключевого слова:
x = MyClassA(city='New York', name='Andy')
также будет работать.И это:
x = MyClassA(name='Andy', city='New York')
также будет работать.
Общее практическое правило (ИМХО): если на сайте вызова очевидно, каковы аргументы - нет необходимости в ключевых словах, в противном случае- Явное лучше, чем неявное .
И только к вашему сведению, вы можете принудительно использовать аргументы ключевых слов следующим образом:
def fun(positional_arg1, *, keyword_only_arg1, keyword_only_arg2): ...
, что означает, что вы не можете вызватьfun
с позиционными аргументами:
>>> fun(1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: fun() takes 1 positional argument but 3 were given
и вам необходимо предоставить все аргументы:
>>> fun(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: fun() missing 2 required keyword-only arguments:
'keyword_only_arg1' and 'keyword_only_arg2'
Так что единственный способ вызвать fun
- это:
fun(1, keyword_only_arg1=1, keyword_only_arg2=3)