python - framework - tutorial django
kwargs analizando las mejores prácticas (6)
Para lograr exactamente lo que pediste, puedes usar
for key in (''log'', ''bin'', ''pid'', ''conf''):
if key in kwargs:
setattr(self, key, kwargs[key])
o
self.__dict__.update((key, kwargs[key])
for key in (''log'', ''bin'', ''pid'', ''conf'')
if key in kwargs)
Sin embargo, generalmente preferiría algo como esto:
def f(log=None, bin=None, pid=None, conf=None):
self.log = log
self.bin = bin
self.pid = pid
self.conf = conf
Si bien esto todavía es algo repetitivo, el código es realmente fácil de leer. Todos los atributos están intializados con respecto a si se pasa el argumento de palabra clave correspondiente, y la firma de la función documenta claramente los argumentos y sus valores predeterminados.
¿Hay una manera más compacta / eficiente de hacer esto?
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]
Si la clave proporcionada en get()
no está en el diccionario, el resultado es None
.
self.log = kwargs.get(''log'')
self.bin = kwargs.get(''bin'')
self.pid = kwargs.get(''pid'')
self.conf = kwargs.get(''conf'')
self.__dict__.update(kwargs)
for k,v in kw.items():
setattr(self, k, v)
for k,v in kwarg.iteritems():
setattr(self, k, v)
En el que setattr(self, "bin", "val")
es como llamar self.bin = "val"
Sin embargo, es más deseable tener una lista blanca como @Sven Marnach.
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)
Esto tiene la ventaja adicional de que self.log
se asigna en cualquier caso ( AttributeError
significa que su código se ha roto como un infierno, nada más. Siempre asegúrese de que todo esté siempre asignado). Sin extra self.log = default_log
líneas. Puede omitir el valor predeterminado para obtener None
.