Accessing an instance's __init__ args from outside the class

Discussion in 'Python' started by Alexander Eberts, Jul 14, 2003.

  1. 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
    Alexander Eberts, Jul 14, 2003
    #1
    1. Advertising

  2. Alexander Eberts

    Duncan Booth Guest

    "Alexander Eberts" <> wrote in
    news:sfAQa.21645$:

    > 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
    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?
    Duncan Booth, Jul 14, 2003
    #2
    1. Advertising

  3. 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" <> wrote in message
    news:Xns93B8AC76381A5duncanrcpcouk@127.0.0.1...
    > "Alexander Eberts" <> wrote in
    > news:sfAQa.21645$:
    >
    > > 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
    > 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?
    Alexander Eberts, Jul 14, 2003
    #3
  4. Alexander Eberts

    Ulrich Petri Guest

    "Alexander Eberts" <> schrieb im Newsbeitrag
    news:RKCQa.27757$...
    > 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.
    Ulrich Petri, Jul 15, 2003
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Ken Varn
    Replies:
    2
    Views:
    622
    Ken Varn
    Jun 22, 2005
  2. Steven Bethard
    Replies:
    2
    Views:
    454
    Steven Bethard
    Feb 16, 2005
  3. Kent Johnson
    Replies:
    7
    Views:
    908
    Jan Niklas Fingerle
    Feb 12, 2006
  4. Ramchandra Apte
    Replies:
    17
    Views:
    335
    Manuel Pégourié-Gonnard
    Sep 30, 2012
  5. wzab
    Replies:
    5
    Views:
    170
    Oscar Benjamin
    May 16, 2013
Loading...

Share This Page