Class data members in C

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Nick Maclaren

    #1

    Class data members in C


    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.
  • Ziga Seilnacht

    #2
    Re: Class data members in C

    Nick Maclaren wrote:
    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:

    PyDictSetItemSt ring(YourType.t p_dict, "attrname", attrvalue);

    Ziga

    Comment

    • Hendrik van Rooyen

      #3
      Re: Class data members in C

      "Nick Maclaren" <nmm1@cus.cam.a c.ukwrote:

      >
      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

      Comment

      • Nick Maclaren

        #4
        Re: Class data members in C


        In article <mailman.2814.1 169026003.32031 .python-list@python.org >,
        "Hendrik van Rooyen" <mail@microcorp .co.zawrites:
        |
        | 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.

        Comment

        • Hendrik van Rooyen

          #5
          Re: Class data members in C

          "Nick Maclaren" <nmm1@cus.cam.a c.ukwrote:

          >
          In article <mailman.2814.1 169026003.32031 .python-list@python.org >,
          "Hendrik van Rooyen" <mail@microcorp .co.zawrites:
          |
          | 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

          Comment

          • Nick Maclaren

            #6
            Re: Class data members in C


            In article <mailman.2861.1 169101998.32031 .python-list@python.org >,
            "Hendrik van Rooyen" <mail@microcorp .co.zawrites:
            |>
            | 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_SetItemS tring
            immediately after PyType_Ready.


            Regards,
            Nick Maclaren.

            Comment

            Working...