Когда использовать ключевые аргументы для инициализации класса? - PullRequest
0 голосов
/ 26 апреля 2019

При создании своих собственных классов я не могу работать, когда я должен или не должен использовать ключевые аргументы.

Существуют ли какие-либо конкретные обстоятельства или общие правила по этому вопросу?

Насколько я могу сказать:

Плюсы:

  1. Явное определение, затрудняющее перевод переменных в неправильный порядок
  2. Делает код более читабельным

Минусы:

  1. При наличии ключевого аргумента необходимо также указать значение по умолчанию, что означает, что экземпляры могут быть инициализированы без каких-либо аргументов.

Пожалуйста, см.ниже MyClassA и MyClassB, которые иллюстрируют эти две точки:

class MyClassA():

    def __init__(self,name,city):

        self.name = name
        self.city = city

x = MyClassA('Andy','New York')



class MyClassB():

    def __init__(self,name=None,city=None):

        self.name = name
        self.city = city

 y = MyClassB(city='New York',name='Andy')

Ответы [ 2 ]

3 голосов
/ 26 апреля 2019

На самом деле, в обоих случаях вы можете передавать аргументы в качестве аргументов ключевого слова:

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)
0 голосов
/ 26 апреля 2019

Вы можете использовать argument=value в 2 случаях:

1 - Когда вы используете функцию, которая имеет много аргументов, но вы хотите установить только определенные параметры

def function(a=None, b=0, c=1, d=None, ......................z=None):
    .....
    return value

function(d='walk', g=4)

2 - Когда вы не знаете порядок параметров, как указано chepner

function(13,14, 'default', 'walk',......)
function(a=13, d='walk')
...