Est-ce une utilisation raisonnable des attributs de la méthode en python?

voix
0

J'ai beaucoup de différents fichiers python, chacun avec de nombreuses méthodes différentes. Chacune de ces méthodes fait un peu tâche, et je veux enregistrer les résultats de cette tâche avec un nom de fichier qui décrit les sorties et les paramètres de cette méthode. Mon idée actuelle est d'avoir, pour chaque méthode, un dictionnaire avec une return_name: structure nom_fichier, enregistré en tant que attribut de méthode, par exemple

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 motivation de base est que je veux garder toutes les informations relatives à cette méthode à l'intérieur, donc si je voulais changer le nom du fichier, il serait facile. Une alternative que je pensais était d'avoir une méthode du même nom qui renvoie simplement le dictionnaire, mais cela semblait être une façon de faire plus pratique il.

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,
    }

Quelques questions: Y a-t-il des lacunes fondamentales à cette idée? Y at-il des modèles alternatifs qui résoudrait ce problème d'une manière plus standard? Le problème est réel mal définie ou n'a pas de sens?

Merci pour toute aide.

Créé 18/12/2018 à 11:11
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Ok, nous allons oublier votre code d'exemple et juste coller avec votre relevé principal problème (légèrement remaniés):

J'ai beaucoup de différents fichiers python, chacun avec de nombreuses fonctions différentes. Je veux enregistrer les résultats de ces fonctions avec un nom de fichier qui décrit les sorties et les paramètres.

Par curiosité, puis-je demander pourquoi « avec un nom de fichier »?

Quoi qu'il en soit: vous voulez « sauver » en quelque sorte les paramètres et le résultat lié à certains appels de fonctions. La façon simple de le faire en Python est d'utiliser un décorateur de fonction. Voici un exemple rapide et sale, en utilisant un dict global pour enregistrer les données qui vous intéresse:

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)

Maintenant que vous avez rassemblé vos données, vous pouvez faire ce que vous voulez avec eux.

Cela peut être grandement améliorée bien sûr (c. -à éviter le global saved_data, l' utilisation inspect.getargspecs(func)d'avoir une représentation plus uniforme des arguments sauvés etc, mais cela devrait au moins vous aider à démarrer.

NB: si vous voulez vraiment « les noms de fichiers décrivant les sorties et les paramètres », vous pouvez réécrire le décorateur afin qu'il enregistre ces « noms » au lieu des valeurs réelles, ou de générer les noms de fichiers après des valeurs recueillies.

Créé 18/12/2018 à 12:41
source utilisateur

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