![]() |
Accessing an instance's __init__ args from outside the class
I'm new to python so appologies to the group if this question is asked
often. I'm wondering if it's possible to query an object instance to find out what arguments the instance's __init__ function was called with from *outside* the class's local namespace. For example, if I define a class Foo as follows: import sys class Foo: def __init__(self, *args): print args # no problem here ....and then create an instance of Foo: >>> someobj = Foo('bar', 'bleck') ('bar', 'bleck') Now, I'd like to be able to find out what arguments someobj was called with. So first I tried: >>> print someobj.args but I get: "AttributeError: args" so then I tried: >>> print some_obj.__init__.func_defaults which returns an empty tuple and then I tried: >>> some_obj.__dict__['args'] Traceback (most recent call last): File "<interactive input>", line 1, in ? KeyError: args No dice.. Is there any way to find out what arguments an object was called with? Are the args stored with the instance? I scoured the python faq but there are no answers (that I could see) to this question. Any help would be much appreciated. yours, Alex Eberts |
Re: Accessing an instance's __init__ args from outside the class
"Alexander Eberts" <alex_eberts@videotron.ca> wrote in
news:sfAQa.21645$O55.673402@wagner.videotron.net: > Is there any way to find out what arguments an object was called > with? Not in general. > Are the args stored with the instance? It depends on the object type. Some objects may save some or all of the arguments to the constructor, but it is up to each object to decide what to do with its arguments. If you create your own class, and want to be able to refer to the __init__ arguments after returning from __init__, then you must save the arguments in the object. So, for your original example you could do: >>> class Foo: def __init__(self, *args): self.args = args print args # no problem here >>> someobj = Foo('bar', 'bleck') ('bar', 'bleck') >>> someobj.args ('bar', 'bleck') -- Duncan Booth duncan@rcp.co.uk int month(char *p){return(124864/((p[0]+p[1]-p[2]&0x1f)+1)%12)["\5\x8\3" "\6\7\xb\1\x9\xa\2\0\4"];} // Who said my code was obscure? |
Re: Accessing an instance's __init__ args from outside the class
Duncan,
Thanks for your response - much appreciated. Do you know how the python interpreter handles *args and **kwargs passed to a class's __init__ method? (maybe the better question is "what section in the python docs describes how class args are handled" :) all the best, Alex "Duncan Booth" <duncan@NOSPAMrcp.co.uk> wrote in message news:Xns93B8AC76381A5duncanrcpcouk@127.0.0.1... > "Alexander Eberts" <alex_eberts@videotron.ca> wrote in > news:sfAQa.21645$O55.673402@wagner.videotron.net: > > > Is there any way to find out what arguments an object was called > > with? > > Not in general. > > > Are the args stored with the instance? > > It depends on the object type. Some objects may save some or all of the > arguments to the constructor, but it is up to each object to decide what to > do with its arguments. If you create your own class, and want to be able to > refer to the __init__ arguments after returning from __init__, then you > must save the arguments in the object. > > So, for your original example you could do: > > >>> class Foo: > def __init__(self, *args): > self.args = args > print args # no problem here > > > >>> someobj = Foo('bar', 'bleck') > ('bar', 'bleck') > >>> someobj.args > ('bar', 'bleck') > > -- > Duncan Booth duncan@rcp.co.uk > int month(char *p){return(124864/((p[0]+p[1]-p[2]&0x1f)+1)%12)["\5\x8\3" > "\6\7\xb\1\x9\xa\2\0\4"];} // Who said my code was obscure? |
Re: Accessing an instance's __init__ args from outside the class
"Alexander Eberts" <alex_eberts@videotron.ca> schrieb im Newsbeitrag
news:RKCQa.27757$O55.714325@wagner.videotron.net.. . > Duncan, > > Thanks for your response - much appreciated. Do you know how the python > interpreter handles *args and **kwargs passed to a class's __init__ method? > (maybe the better question is "what section in the python docs describes how > class args are handled" :) > They are handled exactly as they would be in any other method. It seems you have a bit of a misconception on how the __init__ method works!? Ciao Ulrich PS: To post an answer above the aswered text is not exactly liked on the (use)net. |
| All times are GMT. The time now is 04:21 AM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.