Чтобы достичь именно того, о чем вы просили, вы можете использовать
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)
Однако я бы предпочел что-то вроде этого:
def f(log=None, bin=None, pid=None, conf=None):
self.log = log
self.bin = bin
self.pid = pid
self.conf = conf
Хотя это все еще несколько повторяется, код действительно легко читается.Все атрибуты инициализированы относительно того, передан ли соответствующий аргумент ключевого слова, и подпись функции четко документирует аргументы и их значения по умолчанию.