GNU Info

Info Node: (python2.1-ext.info)Type Methods

(python2.1-ext.info)Type Methods


Prev: Basics Up: Defining New Types
Enter node , (file) or (file)node

Type Methods
============

This section aims to give a quick fly-by on the various type methods
you can implement and what they do.

Here is the definition of `PyTypeObject', with some fields only used in
debug builds omitted:

     typedef struct _typeobject {
         PyObject_VAR_HEAD
         char *tp_name; /* For printing */
         int tp_basicsize, tp_itemsize; /* For allocation */
     
         /* Methods to implement standard operations */
     
         destructor tp_dealloc;
         printfunc tp_print;
         getattrfunc tp_getattr;
         setattrfunc tp_setattr;
         cmpfunc tp_compare;
         reprfunc tp_repr;
     
         /* Method suites for standard classes */
     
         PyNumberMethods *tp_as_number;
         PySequenceMethods *tp_as_sequence;
         PyMappingMethods *tp_as_mapping;
     
         /* More standard operations (here for binary compatibility) */
     
         hashfunc tp_hash;
         ternaryfunc tp_call;
         reprfunc tp_str;
         getattrofunc tp_getattro;
         setattrofunc tp_setattro;
     
         /* Functions to access object as input/output buffer */
         PyBufferProcs *tp_as_buffer;
     
         /* Flags to define presence of optional/expanded features */
         long tp_flags;
     
         char *tp_doc; /* Documentation string */
     
         /* call function for all accessible objects */
         traverseproc tp_traverse;
     
         /* delete references to contained objects */
         inquiry tp_clear;
     
         /* rich comparisons */
         richcmpfunc tp_richcompare;
     
         /* weak reference enabler */
         long tp_weaklistoffset;
     
     } PyTypeObject;

Now that's a _lot_ of methods.  Don't worry too much though - if you
have a type you want to define, the chances are very good that you will
only implement a handful of these.

As you probably expect by now, I'm going to go over this line-by-line,
saying a word about each field as we get to it.

         char *tp_name; /* For printing */

The name of the type - as mentioned in the last section, this will
appear in various places, almost entirely for diagnostic purposes.  Try
to choose something that will be helpful in such a situation!

         int tp_basicsize, tp_itemsize; /* For allocation */

These fields tell the runtime how much memory to allocate when new
objects of this typed are created.  Python has some builtin support for
variable length structures (think: strings, lists) which is where the
`tp_itemsize' field comes in.  This will be dealt with later.

Now we come to the basic type methods - the ones most extension types
will implement.

         destructor tp_dealloc;
         printfunc tp_print;
         getattrfunc tp_getattr;
         setattrfunc tp_setattr;
         cmpfunc tp_compare;
         reprfunc tp_repr;


automatically generated by info2www version 1.2.2.9