Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   Does PyModule_GetDict return information about class method variables? (http://www.velocityreviews.com/forums/t528180-does-pymodule_getdict-return-information-about-class-method-variables.html)

MD 08-10-2007 02:34 AM

Does PyModule_GetDict return information about class method variables?
 
Hi,

I have a variable which is defined inside a class method. When I
call PyModule_GetDict on the module containing this class, the
dictionary doesn't contain any information about this variable. Is
this expected behavior? If so, what options do I have to access this
variable from my Python C extension.

Thanks and Regards,
-MD


Marc 'BlackJack' Rintsch 08-10-2007 05:43 AM

Re: Does PyModule_GetDict return information about class methodvariables?
 
On Thu, 09 Aug 2007 19:34:37 -0700, MD wrote:

> I have a variable which is defined inside a class method. When I
> call PyModule_GetDict on the module containing this class, the
> dictionary doesn't contain any information about this variable. Is
> this expected behavior? If so, what options do I have to access this
> variable from my Python C extension.


You can't access names in methods because they don't exist until you call
the method. It's just like local variables in C. Consider:

void foo(void)
{
int bar = 42;
}

Here `bar` does not exist until you call `foo()` and it disappears as soon
as the function returns.

It's the very same situation in Python:

class A(object):
def foo(self):
bar = 42

The local name `bar` only exists if `foo()` is called on an instance of `A`.

Ciao,
Marc 'BlackJack' Rintsch

MD 08-10-2007 12:54 PM

Re: Does PyModule_GetDict return information about class method variables?
 
Hi Marc,
Thanks for your reply. I am calling my extension function from the
class method itself. So at that point the variable does exist. I am
puzzled why PyModule_GetDict is not able to access the variable even
though it does exist at that point.

Thanks,
-Manas

On Aug 10, 12:43 am, Marc 'BlackJack' Rintsch <bj_...@gmx.net> wrote:
> On Thu, 09 Aug 2007 19:34:37 -0700, MD wrote:
> > I have a variable which is defined inside a class method. When I
> > call PyModule_GetDict on the module containing this class, the
> > dictionary doesn't contain any information about this variable. Is
> > this expected behavior? If so, what options do I have to access this
> > variable from my Python C extension.

>
> You can't access names in methods because they don't exist until you call
> the method. It's just like local variables in C. Consider:
>
> void foo(void)
> {
> int bar = 42;
>
> }
>
> Here `bar` does not exist until you call `foo()` and it disappears as soon
> as the function returns.
>
> It's the very same situation in Python:
>
> class A(object):
> def foo(self):
> bar = 42
>
> The local name `bar` only exists if `foo()` is called on an instance of `A`.
>
> Ciao,
> Marc 'BlackJack' Rintsch




Marc 'BlackJack' Rintsch 08-10-2007 01:19 PM

Re: Does PyModule_GetDict return information about class methodvariables?
 
On Fri, 10 Aug 2007 05:54:03 -0700, MD wrote:

> On Aug 10, 12:43 am, Marc 'BlackJack' Rintsch <bj_...@gmx.net> wrote:
>> class A(object):
>> def foo(self):
>> bar = 42
>>
>> The local name `bar` only exists if `foo()` is called on an instance of `A`.

>
> Thanks for your reply. I am calling my extension function from the
> class method itself. So at that point the variable does exist. I am
> puzzled why PyModule_GetDict is not able to access the variable even
> though it does exist at that point.


It does not exist in the module or the function object but on the stack.
Let's go to C again:


void baz(void);

void foo(void)
{
int bar = 42;
baz();
}

How do you get from `baz()` the value of `foo()`\s local `bar`? Other
than ugly non portable stack trickery!?

Why don't you just give the object as argument to your C function?
Wanting to poke around in the callers name space is code smell. Don't do
that.

Ciao,
Marc 'BlackJack' Rintsch


All times are GMT. The time now is 10:56 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.