2011-04-11 17 views

उत्तर

32
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) 
+5

अच्छा! डिफ़ॉल्ट मान के साथ भी छोटा हो सकता है: 'कुंजी के लिए (...): setattr (self, key, kwargs.get (key)) ' – pajton

+0

@pajton: बेशक, लेकिन मैंने ओपी के कोड के करीब रहने की कोशिश की यथासंभव। –

+0

@pajton 'अगर kwargs में कुंजी क्यों है:' आपके सुझाव में लाइन हटा दी गई है? क्यों 'kwargs में कुंजी' की जांच नहीं करें? –

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

हैं get() में प्रदान की कुंजी शब्दकोश परिणाम None है में नहीं है।

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

self.__dict__.update(kwargs)

+0

यह बहुत खतरनाक हो सकता है और हैकी किसी भी तरह से है। – delnan

21
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 प्राप्त करने के लिए डिफ़ॉल्ट को छोड़ सकते हैं।

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

जिसमें setattr(self, "bin", "val")self.bin = "val"

बुला हालांकि ऐसा लगता है जैसे @Sven Marnach है एक श्वेत सूची के लिए अधिक वांछनीय है की तरह है।

संबंधित मुद्दे