Hello,

Originally I posted this as a bug but it was shot down pretty quickly.
I am still mildly curious about this as I'm missing a bit of
understanding of Python here. Why is it that the following code
snippet:

def decorator( call ):
    def inner(func):
        def application( *args, **kwargs ):
            call(*args,**kwargs)
            func(*args,**kwargs)
        return application

    return inner

class DecorateMe:
    @decorator( call=DecorateMe.callMe )
    def youBet( self ):
        pass

    def callMe( self ):
        print "Hello!"

DecorateMe().youBet()

Will not compile, giving:
Traceback (most recent call last):
  File "badpython.py", line 10, in <module>
    class DecorateMe:
  File "badpython.py", line 11, in DecorateMe
    @decorator( call=DecorateMe.callMe )
NameError: name 'DecorateMe' is not defined

Where if you change the "call=DecorateMe.callMe" to "call=lambda x:
DecorateMe.callMe(x)" everything goes along its merry way. Nesting the
call in a lambda seems to allow it to recognize the class definition.
Any ideas as to what is going on here (other than ugly code)?

Thank you,
Thomas Dimson
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to