Подтвердить что ты не робот

Kwargs разбора лучшей практики

Есть ли более компактный/эффективный способ сделать это?

    for key in kwargs:
        if key == 'log':
            self.log = kwargs[key]
        elif key == 'bin':
            self.bin = kwargs[key]
        elif key == 'pid':
            self.pid = kwargs[key]
        elif key == 'conf':
            self.conf = kwargs[key]
4b9b3361

Ответ 1

for key in ('log', 'bin', 'pid', 'conf'):
    if key in kwargs:
        setattr(self, key, kwargs[key])

или

self.__dict__.update((key, kwargs[key])
                     for key in ('log', 'bin', 'pid', 'conf')
                     if key in kwargs)

Ответ 2

self.log = kwargs.get('log', default_log)
self.bin = kwargs.get('bin', default_bin)
self.pid = kwargs.get('pid', default_pid)
self.conf = kwargs.get('conf', default_conf)

Это имеет дополнительное преимущество в том, что self.log назначается в любом случае (AttributeError означает, что ваш код сломан как ад, не более того. Всегда удостоверяйтесь, что все всегда назначено.). Без дополнительных строк self.log = default_log. Вы можете опустить значение по умолчанию, чтобы получить None.

Ответ 3

Если ключ, указанный в get(), отсутствует в словаре, результат None.

self.log = kwargs.get('log')
self.bin = kwargs.get('bin')
self.pid = kwargs.get('pid')
self.conf = kwargs.get('conf')

Ответ 4

for k,v in kw.items():
   setattr(self, k, v)

Ответ 5

for k,v in kwarg.iteritems():
   setattr(self, k, v)

В котором setattr(self, "bin", "val") походит на вызов self.bin = "val"

Однако желательно иметь белый список, например @Sven Marnach.

Ответ 6

self.__dict__.update(kwargs)