Class data members in C

N

Nick Maclaren

Hmm. The extensions documentation describes how to add instance
members to a class (PyMemberDef), but I want to add a class member.
Yes, this is constant for all instances of the class.

Any pointers?


Regards,
Nick Maclaren.
 
Z

Ziga Seilnacht

Nick said:
Hmm. The extensions documentation describes how to add instance
members to a class (PyMemberDef), but I want to add a class member.
Yes, this is constant for all instances of the class.

Any pointers?

Add something like this to your PyMODINIT_FUNC after you have
initialized your type with PyType_Ready:

PyDictSetItemString(YourType.tp_dict, "attrname", attrvalue);

Ziga
 
H

Hendrik van Rooyen

Hmm. The extensions documentation describes how to add instance
members to a class (PyMemberDef), but I want to add a class member.
Yes, this is constant for all instances of the class.

Any pointers?

When? - at time of defining base class, between class definition and
first instance, at time of creating instance, or after instance creation?

After instance creation is not easy, I think you would have to add
to each instance...

But then, I may be wrong - I often am.

- Hendrik
 
N

Nick Maclaren

|> >
|> > Hmm. The extensions documentation describes how to add instance
|> > members to a class (PyMemberDef), but I want to add a class member.
|> > Yes, this is constant for all instances of the class.
|>
|> When? - at time of defining base class, between class definition and
|> first instance, at time of creating instance, or after instance creation?
|>
|> After instance creation is not easy, I think you would have to add
|> to each instance...

Oh, one of the first two - I am not bonkers! Changing a class after
instance creation is guaranteed to cause confusion, if nothing else.


Regards,
Nick Maclaren.
 
H

Hendrik van Rooyen

|> >
|> > Hmm. The extensions documentation describes how to add instance
|> > members to a class (PyMemberDef), but I want to add a class member.
|> > Yes, this is constant for all instances of the class.
|>
|> When? - at time of defining base class, between class definition and
|> first instance, at time of creating instance, or after instance creation?
|>
|> After instance creation is not easy, I think you would have to add
|> to each instance...

Oh, one of the first two - I am not bonkers! Changing a class after
instance creation is guaranteed to cause confusion, if nothing else.
*grin* - its also just about impossible to do, if you try to imagine
what you would have to do to all instances when you effectively
change the __init__ method. And some people expect it to happen
automagically...

Sorry I can't be of more help. All of the docs I have read essentially
talk about changing instances. From a practical point of view I would
say: "Just redefine it". But that is not very helpful. Specially if you are
mucking about in C, as your title suggests...

<off topic language note>

It has never struck me before that the root word for
"madness" and the slang for "copulation" is the same.
I wonder if there is some sort of a message here?

<end>

- Hendrik
 
N

Nick Maclaren

|>
|> > Oh, one of the first two - I am not bonkers! Changing a class after
|> > instance creation is guaranteed to cause confusion, if nothing else.
|> >
|> *grin* - its also just about impossible to do, if you try to imagine
|> what you would have to do to all instances when you effectively
|> change the __init__ method. And some people expect it to happen
|> automagically...

Oh, it's quite easy to do, with several different semantics. I have even
used a couple of them. All are seriously counter-intuitive :)

I have never used one that successfully reran initialisation, though
I have seen people attempt it! And tried it myself ....

|> Sorry I can't be of more help. All of the docs I have read essentially
|> talk about changing instances. From a practical point of view I would
|> say: "Just redefine it". But that is not very helpful. Specially if you are
|> mucking about in C, as your title suggests...

Thanks. As someone else posted, the answer is PyDict_SetItemString
immediately after PyType_Ready.


Regards,
Nick Maclaren.
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,062
Latest member
OrderKetozenseACV

Latest Threads

Top