I can't believe how long it took me to discover this. Thanks for clarifying. This could be pretty useful in some cases, actually. Python is just so quirky.
On Friday, August 10, 2012 10:59:46 PM UTC+8, Justin Israel wrote: > > A very popular and common question. Detailed explanation: > http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument > > > > On Aug 10, 2012, at 4:17 AM, Adam Mechtley <[email protected]<javascript:>> > wrote: > > Not a bug, and not restricted to class methods. Same thing happens of you > define a list in your default parameter list and mutate it in your method > body. The issue is you have a reference to the same mutable object (the one > defined in te paramter list) when you're not passing an explicit value. If > you need a default value for a mutable object, always set it inside your > method body, not in the parameter list. > > On Friday, August 10, 2012, Jay Goodman wrote: > >> I found some 'wierdness' with classmethods today (in 2.5). I have a >> classmethod with kwargs, and I noticed that the kwarg was, somehow, taking >> on a global scope. >> >> example: >> --------- >> @classmethod >> def classMethodName (cls, argName, kwargName={}): >> doStuff >> -------- >> >> 1st Call--> classMethodName(argName) # kwarg is not passed in >> kwarg is empty >> kwarg (dictionary) ends up getting filled with data >> kwarg is NOT cleared (clearing it is a workaround, though) >> >> 2nd Call--> classMethodName(argName) #same as the first >> kwarg is NOT EMPTY--it contains the data from the 1st call >> >> So somehow, the kwarg is getting global scope? Is this how classmethods >> are designed to work? At first I thought I screwed up and this variable >> was defined globally, but that is not the case. Also, this issue can be >> worked around by either clearing the dictionary or using kwargs. I was >> just looking for a better understanding as to why it was happening this >> way? >> Any takers? >> thanks! >> >> >> >> -- >> view archives: http://groups.google.com/group/python_inside_maya >> change your subscription settings: >> http://groups.google.com/group/python_inside_maya/subscribe >> > -- > view archives: http://groups.google.com/group/python_inside_maya > change your subscription settings: > http://groups.google.com/group/python_inside_maya/subscribe > > -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe
