I do not like top posting.
Some thoughts in randon order:
Introspection is version-specific.
Call-time introspection is different from definition-time introspection.
Do what is easy and works.
Do not use recipes that depend on version-specific stuff you do not
understand.
Code objects, I believe, know the names of parameters.
That question and responses were only about methods, not non-class
functions.
You get to match these responses to your post ;-).
Terry
David Hirschfield wrote:
Yeah, it definitely seems like having two separate decorators is the
solution. But the strange thing is that I found this snippet after some
deep googling, that seems to do something *like* what I want, though I
don't understand the descriptor stuff nearly well enough to get what's
happening:
http://stackoverflow.com/questions/306130/python-decorator-makes-function-forget-that-it-belongs-to-a-class
answer number 3, by ianb. It seems to indicate there's a way to
introspect and determine the class that the function is going to be
bound to...but I don't get it, and I'm not sure it's applicable to my case.
I'd love an explanation of what is going on in that setup, and if it
isn't usable for my situation, why not?
Thanks again,
-David
Terry Reedy wrote:
David Hirschfield wrote:
I'm having a little problem with some python metaprogramming. I want
to have a decorator which I can use either with functions or methods
of classes, which will allow me to swap one function or method for
another. It works as I want it to, except that I want to be able to
do some things a little differently depending on whether I'm swapping
two functions, or two methods of a class.
Unbounds methods are simply functions which have become attributes of
a class. Especially in Py3, there is *no* difference.
Bound methods are a special type of partial function. In Python, both
are something else, though still callables. Conceptually, a partial
function *is* a function, just with fewer parameters.
Trouble is, it appears that when the decorator is called the function
is not yet bound to an instance, so no matter whether it's a method
or function, it looks the same to the decorator.
Right. Whether it is an A or an A, it looks like an A.
Worse: when the decorator is called, there is no class for there to be
instances of.
This simple example illustrates the problem:
Add a second parameter to tell the decorator which variant of behavior
you want. Or write two variations of the decorator and use the one you
want.
tjr
--
http://mail.python.org/mailman/listinfo/python-list