parameter - python pass kwargs to function
¿La inspección de IntelliJ Python 3 “esperaba un diccionario, recibió un dictamen”, es un falso positivo para super con** kwargs? (1)
Uso Python 3 y quiero envolver argparse.ArgumentParser
con una clase personalizada que configura formatter_class=argparse.RawDescriptionHelpFormatter
de forma predeterminada. Puedo hacerlo con éxito, sin embargo, IntelliJ IDEA 2017.1 con Python Plugin (PyCharm) da una advertencia para el siguiente código:
class CustomParser(argparse.ArgumentParser):
def __init__(self, formatter_class=argparse.RawDescriptionHelpFormatter, **kwargs):
# noinspection PyArgumentList
super().__init__(formatter_class=formatter_class, **kwargs) # warning in this line for the last argument if suppression comment above removed
Si uno elimina el comentario con el comando de supresión IntelliJ, la advertencia en kwargs es "Se esperaba un diccionario, se emitió un dictado", pero está funcionando. ¿Es esta una falsa advertencia positiva o puede hacerse mejor sin la advertencia? ¿Hay un problema real detrás de esta advertencia que ayuda a evitar?
Pregunta secundaria: ¿Hay una diferencia en el uso
formatter_class = kwargs.pop(''formatter_class'', argparse.RawDescriptionHelpFormatter)
lugar de definir explícitamente el parámetro nombrado en la firma? Según PEP20 más explícito en la firma es mejor, ¿verdad?
Sí, eso parece ser un falso positivo.
Preguntó sobre formatter_class=kwargs.pop(''formatter_class'', argparse.RawDescriptionHelpFormatter)
. Por favor no hagas eso. Los kwargs
, que aparecen como el siguiente argumento, parecen malos. Además, los argumentos de palabras clave predeterminadas deben establecerse en una constante simple en lugar de en una estructura de datos mutable, ya que existe una gran diferencia entre evaluar en el momento de la importación y evaluar en el tiempo de ejecución. Véase, por ejemplo, http://www.effbot.org/zone/default-values.htm . El idioma habitual sería formatter_class=None
en la firma, y luego en el cuerpo, no se realiza ninguna prueba y se muta kwargs al contenido de su corazón.