es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Función sobrecargada en Python.

Estoy teniendo problemas para entender la forma más clara de hacer esto. Me gustaría una función llamada set_delay() que acepte una variedad de parámetros. Tengo 3 tipos diferentes de “tipos de retraso” que se pueden establecer: constante, uniforme y normal. Esto es lo que tengo actualmente:

def set_delay_constant(delay):
    continuar

def set_delay_uniform(min_delay, max_delay):
    continuar

def set_delay_normal(mean, std_dev, timeout):
    continuar

El problema que tengo con lo anterior es que aproximadamente el 80% del código en cada función se repite. Algunas ideas que he visto son:

def set_delay(delay_type, delay=None, min_delay=None, max_delay=None, mean=None, std_dev=None, timeout=None):
    continuar

Pero cuando necesito ampliar esto con más tipos de retraso, puedo ver que esto se vuelve muy largo y difícil de leer. ¿Cuál es la forma más “pythonica” de hacer esto? ¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una forma de hacer que la función set_delay() sea más concisa y modular podría ser utilizar la sobrecarga de funciones, también conocida como sobrecarga de métodos en la programación orientada a objetos. Dado que Python no admite la sobrecarga de métodos como otros lenguajes de programación, podemos utilizar declaraciones condicionales o bloques if-else para implementarlo en Python.

    Aquí hay un ejemplo que utiliza la sobrecarga de funciones para implementar la función set_delay():

    def set_delay(delay_type, *args):
        if delay_type == "constant":
            set_delay_constant(*args)
        elif delay_type == "uniform":
            set_delay_uniform(*args)
        elif delay_type == "normal":
            set_delay_normal(*args)
        else:
            # manejar error o lanzar excepción
            print("Tipo de retardo inválido:", delay_type)
    
    def set_delay_constant(delay):
        # implementación para retardo constante
    
    def set_delay_uniform(min_delay, max_delay):
        # implementación para retardo uniforme
    
    def set_delay_normal(mean, std_dev, timeout):
        # implementación para retardo normal
    

    En este ejemplo, la función set_delay() toma un argumento delay_type y un número variable de argumentos utilizando la sintaxis *args. Dependiendo del valor de delay_type, llama a la función correspondiente con los argumentos dados utilizando nuevamente la sintaxis *args.

    Utilizando este enfoque, podemos agregar fácilmente más tipos de retardo sin hacer que el código sea más largo y difícil de leer. También podemos reutilizar las mismas funciones para diferentes casos de uso, lo que hace que el código sea más modular y escalable.

Comments are closed.