【问题标题】:Python decorators in classes Error类中的 Python 装饰器错误
【发布时间】:2016-06-13 08:55:18
【问题描述】:
class A(object):
    def wrapped(self, func):
        func.string = self.get_something()
        return func

    def get_something(self):
        return "something"

    @wrapped
    def main(self):
        print self.main.string
a = A()
a.main()

TypeError: Wrapped() 只接受 2 个参数(给定 1 个)

【问题讨论】:

  • 你的问题是什么?
  • wrapped 在类甚至存在之前就被调用了......所以没有实例(显然),因此没有什么可以被认为是self......你实际上想要完成什么?
  • 我想在 main.js 中包含静态变量。所以,当我调用 main 函数而不是 A() 时,变量将被分配

标签: python python-decorators


【解决方案1】:

wrapped()main() 的定义中被调用。当它被调用时,它没有被赋予self,因为没有A的实例可以赋予wrapped()。做你想做的事,不要使用装饰器。相反,定义一个分配正确属性的__init__() 方法。但是,我不知道您为什么希望它成为self.main() 的属性。通常,向函数添加属性并不是一个好主意。你已经有一堂课了;用它。只需定义self.string 而不是self.main.string

【讨论】:

  • 我想在 main() 中暗示静态变量。
  • 在这种情况下,请在main() 中定义它们。
猜你喜欢
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 2019-09-20
  • 2010-10-14
  • 2018-01-28
  • 1970-01-01
  • 2011-04-28
相关资源
最近更新 更多