【问题标题】:Python decorator for a class method to update class variable用于更新类变量的类方法的 Python 装饰器
【发布时间】:2020-07-23 19:21:00
【问题描述】:

如何在 python 中实现装饰器并在 Python 类中使用它,例如在类方法之一上,以便它可以在运行时修改类变量(结果)?在代码中,当 do_something 被调用并完成运行时,装饰器应该将内容添加到结果字典中

import mydecorator 
class foo:
    def __init__(self):
        self.results = {}

    @mydecorator
    def do_something():
        # do something

【问题讨论】:

  • 到底是什么问题?你有没有尝试过,做过任何研究?
  • 基本上我想为我的类方法计时并将时间保存在一个绑定到类的变量中,这样一旦我调用任何类方法我就可以访问它。我可以编写一个装饰器来打印时间,但我不知道如何将时间附加到类变量中。我做了研究,但我得到的只是如何打印时间或如何访问我的装饰器中的类变量,我的问题是如何通过装饰器更新类状态
  • 那不是类方法,也不是类变量。那是一个 instance 方法和一个 instance 变量。无论如何,究竟是什么不起作用?请确切地展示您当前的方法以及它如何不起作用。

标签: python python-decorators


【解决方案1】:

您所指的称为 setter。 Setter 本质上是用于设置对象实例变量值的方法。为了使用装饰器实现这一点,需要遵循某些规则:

  • 方法名必须与变量名相同。
  • 装饰器@name.setter 必须位于其定义之前。

您可以轻松地在您创建的类中实现 setter:

class foo:
    def __init__(self):
        self.results = {}

    @results.setter
    def results(self,dictIn):
        self.results = dictIn

如您所见,在上述示例中不创建 setter 不会有太大变化,但在某些情况下,您可能希望在修改数据成员的值时行为有所不同。这基本上就是setter的使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-17
    • 2018-07-14
    • 2014-01-14
    • 1970-01-01
    • 2011-07-17
    • 2014-01-01
    • 2012-02-09
    • 2021-09-12
    相关资源
    最近更新 更多