By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,660 Members | 1,102 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,660 IT Pros & Developers. It's quick & easy.

Does PyModule_GetDict return information about class method variables?

P: n/a
MD
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

Aug 10 '07 #1
Share this Question
Share on Google+
3 Replies


P: n/a
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
Aug 10 '07 #2

P: n/a
MD
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.netwrote:
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

Aug 10 '07 #3

P: n/a
On Fri, 10 Aug 2007 05:54:03 -0700, MD wrote:
On Aug 10, 12:43 am, Marc 'BlackJack' Rintsch <bj_...@gmx.netwrote:
>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
Aug 10 '07 #4

This discussion thread is closed

Replies have been disabled for this discussion.