Украшение методов класса Python - как я передаю экземпляр декоратору?

Это - Python 2.5, и это - GAE также, не, что это имеет значение.

У меня есть следующий код. Я украшаю нечто () метод в панели, с помощью dec_check класса в качестве декоратора.

class dec_check(object):

  def __init__(self, f):
    self.func = f

  def __call__(self):
    print 'In dec_check.__init__()'
    self.func()

class bar(object):

  @dec_check
  def foo(self):
    print 'In bar.foo()'

b = bar()
b.foo()

При выполнении этого я надеялся видеть:

In dec_check.__init__()
In bar.foo()

Но я добираюсь"TypeError: foo() takes exactly 1 argument (0 given)"как .foo(), быть методом объекта, берет сам в качестве аргумента. Я предполагаю, что проблема состоит в том что экземпляр bar на самом деле не существует, когда я выполняю код декоратора.

Таким образом, как я передаю экземпляр bar к классу декоратора?

59
задан ShadowRanger 5 September 2019 в 19:57
поделиться