This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2008年04月02日 02:23 by tdimson, last changed 2022年04月11日 14:56 by admin. This issue is now closed.
| Messages (2) | |||
|---|---|---|---|
| msg64830 - (view) | Author: tdimson (tdimson) | Date: 2008年04月02日 02:23 | |
Having a peculiar issue (exception raised despite being valid) when defining a decorator that takes a class method as a callback. Here is a cooked example: def decorator( callback ): def inner(func): def application( *args, **kwargs ): callback(*args,**kwargs) func(*args,**kwargs) return application return inner class DecorateMe: @decorator( callback=DecorateMe.callback ) def youBet( self ): pass def callback( self ): print "Hello!" >>> DecorateMe().youBet() Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> DecorateMe().youBet() File "C:\Python25\badpython.py", line 4, in application callback(*args,**kwargs) TypeError: unbound method callback() must be called with DecorateMe instance as first argument (got DecorateMe instance instead) If you change the line "callback=DecorateMe.callback" to "callback=lambda x: DecorateMe.callback(x)" python gives you: >>> DecorateMe().youBet() Hello! Mysteriously, I did encounter this during my coding with a non-cooked decorator. |
|||
| msg64839 - (view) | Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) | Date: 2008年04月02日 07:37 | |
First, your code does not compile: when compiling the DecorateMe class body, the DecorateMe class does not yet exist, and "callback=DecorateMe.callback" is an error! And this explains your surprise: certainly there is a previous version of a DecorateMe class in your module (or interactive session). This other class has the same name, but it is still a different class, hence the message. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:56:32 | admin | set | github: 46785 |
| 2008年04月02日 07:37:17 | amaury.forgeotdarc | set | status: open -> closed resolution: not a bug messages: + msg64839 nosy: + amaury.forgeotdarc |
| 2008年04月02日 02:23:49 | tdimson | create | |