[Python-Dev] Decorator order implemented backwards?

Anthony Baxter anthony at interlink.com.au
Tue Aug 10 07:00:27 CEST 2004


James Y Knight wrote:
> I haven't seen anyone remark upon this yet, but the order of decorator 
> application appears to be implemented backwards.
>>     def test_order(self):
>>         class C(object):
>>             @funcattrs(abc=1) @staticmethod
>>             def foo(): return 42
>>         # This wouldn't work if staticmethod was called first
>>         self.assertEqual(C.foo(), 42)
>>         self.assertEqual(C().foo(), 42)

How odd. I'm positive at one point I tested this and it was
the right way round.

 >>> def dec1(x):
...     print "dec1"
...     return x
...
 >>> def dec2(x):
...     print "dec2"
...     return x
...
 >>>
 >>> @dec1
... @dec2
... def foo(): pass
...
dec1
dec2
 >>>

This is definitely wrong. Wrong wrong wrong.

Anthony


More information about the Python-Dev mailing list