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]
Ответы
Ответ 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)