这是python中方法属性的合理使用吗?

这是python中方法属性的合理使用吗?,python,Python,我有许多不同的python文件,每个文件都有许多不同的方法。这些方法中的每一个都执行一些任务,我想用一个文件名保存该任务的结果,该文件名描述该方法的输出和参数。我目前的想法是,对于每个方法,都有一个带有return\u name:file\u name结构的字典,保存为方法属性,例如 def addNumbers(number_1, number_2): addNumbers.filename_dictionary = { "number1": "number1_" +

我有许多不同的python文件,每个文件都有许多不同的方法。这些方法中的每一个都执行一些任务,我想用一个文件名保存该任务的结果,该文件名描述该方法的输出和参数。我目前的想法是,对于每个方法,都有一个带有return\u name:file\u name结构的字典,保存为方法属性,例如

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
这样做的基本动机是,我希望将与该方法相关的所有信息都保存在其中,因此,如果我想更改文件名,这将很容易。我想到的另一种方法是使用一个名称类似的方法,只返回字典,但这似乎是一种更方便的方法

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",
    }
一些问题:这个想法有没有根本性的缺陷?是否有其他模式可以以更标准的方式解决此问题?实际问题是定义不清还是没有意义


谢谢您的帮助。

好的,让我们忘掉您的示例代码,只需稍微重新表述一下您的主要问题陈述:

我有许多不同的python文件,每个文件都有许多不同的函数。我想用一个描述输出和参数的文件名保存这些函数的结果

出于好奇,我可以问一下为什么要用文件名吗

无论如何:您希望以某种方式保存某些函数调用的参数和相关结果。在Python中实现这一点的简单方法是使用函数装饰器。下面是一个快速而肮脏的示例,使用全局dict保存您感兴趣的数据:

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)
现在你已经收集了你的数据,你可以用它们做任何你想做的事情

当然,这可以大大改进,即避免全局保存的_数据,使用inspect.getargspecsfunc更统一地表示保存的参数等,但这至少应该让您开始


注意:如果您确实想要文件名来描述输出和参数,您可以重写decorator,使其保存这些文件名而不是实际值,或者从收集的值生成这些文件名。

我不清楚为什么需要字典以及打算如何使用它?当我想保存方法的输出时,我想获得字典中定义的文件名。所以,当我想让文件名保存addNumbers.filename\u dictionary时,我会调用addNumbers.filename\u dictionary。请注意,这些是函数,而不是属于类的方法。哦,谢谢你的区别-我以前不知道这一点。谢谢你,我之前不知道decorators。文件名只是我的模式用例,你是对的,我可以重写装饰器或在以后生成它们?我试图删除它,但输出没有任何改变。@eygrr它使save成为一个行为良好的装饰器-保留装饰函数的名称和docstring-如本文所述