Вы можете просто изменить свой код на:
def bar(fn):
def wrapped():
print "bar"
return fn()
return wrapped
class foo():
@staticmethod
@bar
def hello():
print "hello"
foo.hello()
Это происходит потому, что вы должны определить функцию перед ее вызовом. Это проблема, потому что это:
@bar
def hello():
print "hello"
эквивалентно:
def hello():
print "hello"
hello = bar(hello)
Итак, вы пытались вызвать функцию до того, как ее определили.