Es este un uso razonable de los atributos de los métodos en Python?

votos
0

Tengo muchos archivos diferentes pitón, cada uno con muchos métodos diferentes. Cada uno de estos métodos hace alguna tarea, y quiero guardar los resultados de esa tarea con un nombre de archivo que describe las salidas y los parámetros para ese método. Mi idea actual es que, para cada método, un diccionario con un return_name: Estructura nombre_archivo, guardado como un atributo del método, por ejemplo,

def addNumbers(number_1, number_2):
    addNumbers.filename_dictionary = {
        number1: number1_ + str(number_1) + .txt,
        number2: number2_ + str(number_2) + .txt
    }
    final_number = number_1 + number_2
    return final_number

La motivación básica de esto es que quiero seguir toda la información relacionada con ese método en el interior de la misma, por lo que si quería cambiar el nombre del archivo que sería fácil. Una de las alternativas que pensé fue tener un método de nombre similar que sólo devuelve el diccionario, pero esto parecía una manera más conveniente de hacerlo.

def addNumbers(number_1, number_2):
    added_number = number_1 + number_2
    multiplied_number = number_1 * number_2
    return added_number, multiplied_number

def addNumbersDictionary(number_1, number_2):
    return {
        added_number: added + str(number_1) + _+ str(number_2)+.txt,
        multiplied_number: multiplied + str(number_1) + _+ str(number_2)+.txt,
    }

Algunas preguntas: ¿Hay defectos fundamentales a esta idea? ¿Hay patrones alternativos que resolver este problema de una manera más estándar? Es el problema real pobremente definida o no tiene sentido?

Gracias por cualquier ayuda.

Publicado el 18/12/2018 a las 11:11
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Ok, vamos a olvidarnos de su código de ejemplo y sólo se adhieren con su estado de cuenta principal problema (ligeramente reformulada):

Tengo muchos archivos diferentes pitón, cada uno con diferentes funciones. Quiero guardar los resultados de esas funciones con un nombre de archivo que describe las salidas y los parámetros.

Por curiosidad, se puede saber por qué "con un nombre de archivo"?

De todos modos: usted quiere de alguna manera "salvar" los parámetros y resultados relacionados para algunas llamadas a funciones. La forma más simple de hacer esto en Python es usar un decorador función. Aquí está un ejemplo rápido y sucio, utilizando un diccionario global para guardar los datos que le interesa:

from collections import defaultdict
from functools import wraps
saved_data = defaultdict(list)

def save(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        saved_data[func.__name__].append({"args": args, "kwargs": kwargs, "result": result})
        return result

    return wrapper 


@save
def add_nums(num1, num2):
   return num1 + num2


add_nums(1, 2)
add_nums(3, 4)
add_nums(num2=2, num1=1)

print(saved_data)

Ahora que han recogido sus datos, puede hacer lo que quiera con ellos.

Esto puede ser mejorado enormemente, por supuesto (es decir, evitar el mundial saved_data, utilizando inspect.getargspecs(func)para tener una representación más uniforme de los argumentos guardados etc, pero esto se debe al menos empezar.

NB: si realmente quiere "nombres de archivo que describen las salidas y los parámetros", puede reescribir el decorador de modo que se ahorra esos "nombres de archivo" en lugar de los valores reales, o generar esos nombres de archivo después de los valores recogidos.

Respondida el 18/12/2018 a las 12:41
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more