odd difference calling function from class or instance variable
GregS
not at my.real.address.com
Wed Aug 13 05:06:54 EDT 2014
Hello,
This is my first post here so please gently inform me of any etiquette
breaches.
I'm seeing a behaviour I can't explain with Python 3.4.1 when I call a
function via a reference stored in an object.
When I assign the reference as a class variable, the reference has
__self__ set, too, so I get an extra argument passed to the function.
If I assign the reference as an instance variable, then __self__ is
unset so no extra argument.
Here's what I mean:
>>> def print_args(*args):
print(args)
>>> class C:
ref = None
>>> C.ref = print_args # assign to class variable
>>> i = C()
>>> i.ref() # call via class variable - get a 'self' argument passed
(<__main__.C object at 0x1071a05f8>,)
>>> i.ref = print_args # assign to instance variable
>>> i.ref() # call via instance variable: no arguments
()
If you look at i.ref.__self__ for the two cases, you'll see what's
going on. I've tried RTFMing but can't find the reason for the two
behaviours. Could someone provide an explanation for me, please?
Thanks,
Greg
More information about the Python-list
mailing list