Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中存储每次调用时的方法输出_Python_Decorator - Fatal编程技术网

如何在python中存储每次调用时的方法输出

如何在python中存储每次调用时的方法输出,python,decorator,Python,Decorator,鉴于班级: class MyClass: def __init__(self): self.log = [] return def fitness(self, x): return x*x 我希望能够将fitness方法每次调用的输出存储到log属性中。为了实现以下目标: my_obj = MyClass() my_obj.fitness(3) # Expected output 9 my_obj.fitness(6) # E

鉴于班级:

class MyClass:
    def __init__(self):
        self.log = []
        return

    def fitness(self, x):
        return x*x
我希望能够将
fitness
方法每次调用的输出存储到
log
属性中。为了实现以下目标:

my_obj = MyClass()

my_obj.fitness(3)
# Expected output 9
my_obj.fitness(6)
# Expected output 36

my_obj.log 
# Expected output [9, 36]
我正在考虑一个方法装饰器,但我不知道如何将属性作为参数传递。我需要在类中嵌入log属性,而不是外部变量。
我正在使用python 3。

您不需要装饰器,只需编辑
fitness
方法来修改对象
log
变量:

class MyClass:
    def __init__(self):
        self.log = []
        return

    def fitness(self, x):
        self.log.append(x*x)
        return x*x

您需要做的是让fitness方法直接修改log属性:

def fitness(self, x):
    self.log.append(x*x)

并没有规定装饰器必须引用外部变量。这一定是一个重复的问题。返回之前,只需在fitness方法中添加
self.log.append(x*x)
?在
fitness
中,将
x*x
的结果存储在一个变量中,将该结果添加到日志中,然后返回。是否可以修改
MyClass.fitness
?可能的重复