Cómo degradar un argumento de entrada de una función y mantener la compatibilidad hacia atrás.
Me gustaría cambiar los argumentos de entrada de una función. Esto también implicará cambios dentro del cuerpo de la función.
¿Cuál es una forma pythonica de marcar un argumento de entrada como “obsoleto” y mantener la compatibilidad hacia atrás al mismo tiempo? Aquí tienes un ejemplo de juguete:
from typing import List
# función original
def sum_numbers(numbers: List[int]):
return sum(numbers)
# función con argumentos de entrada y cuerpo de función cambiados
def sum_numbers(a: int, b: int) -> int:
return a + b
El usuario debería poder llamar a sum_numbers
ya sea con el argumento numbers: List[int]
o utilizando a: int, b: int
. Sin embargo, quiero enviar una DeprecationWarning
cuando el usuario utiliza el método de llamada original.
davy.ai
Una forma de marcar un argumento de entrada como obsoleto en Python es utilizando el decorador
@deprecated
de la bibliotecadeprecated
. Primero, instala la biblioteca utilizando pip:Luego, importa el decorador y úsalo en la función original:
Con este decorador, cuando el usuario llame a la función con el argumento obsoleto, se generará una advertencia de
DeprecationWarning
con la razón especificada.Para mantener la compatibilidad hacia atrás y permitir que el usuario utilice los nuevos argumentos, puedes definir una nueva función que traduzca los nuevos argumentos en los antiguos y llame a la función obsoleta:
Ahora el usuario puede llamar a cualquiera de las dos funciones con cualquiera de los conjuntos de argumentos, y el decorador
@deprecated
generará una advertencia si se utilizan los argumentos obsoletos.