Modernize the minimal example of an extension type.
authorFred Drake <fdrake@acm.org>
Fri, 12 Apr 2002 16:17:06 +0000 (16:17 +0000)
committerFred Drake <fdrake@acm.org>
Fri, 12 Apr 2002 16:17:06 +0000 (16:17 +0000)
Doc/ext/noddy.c

index d0842e08c305c7f1040147e02d5dee28f35d6752..51d801fcd19bb0c1d96a5c8f5b95f10cc799af3f 100644 (file)
@@ -4,6 +4,7 @@ staticforward PyTypeObject noddy_NoddyType;
 
 typedef struct {
     PyObject_HEAD
+    /* Type-specific fields go here. */
 } noddy_NoddyObject;
 
 static PyObject*
@@ -11,21 +12,24 @@ noddy_new_noddy(PyObject* self, PyObject* args)
 {
     noddy_NoddyObject* noddy;
 
-    if (!PyArg_ParseTuple(args,":new_noddy")) 
-        return NULL;
-
     noddy = PyObject_New(noddy_NoddyObject, &noddy_NoddyType);
 
+    /* Initialize type-specific fields here. */
+
     return (PyObject*)noddy;
 }
 
 static void
 noddy_noddy_dealloc(PyObject* self)
 {
+    /* Free any external resources here;
+     * if the instance owns references to any Python
+     * objects, call Py_DECREF() on them here.
+     */
     PyObject_Del(self);
 }
 
-static PyTypeObject noddy_NoddyType = {
+statichere PyTypeObject noddy_NoddyType = {
     PyObject_HEAD_INIT(NULL)
     0,
     "Noddy",
@@ -44,15 +48,19 @@ static PyTypeObject noddy_NoddyType = {
 };
 
 static PyMethodDef noddy_methods[] = {
-    {"new_noddy", noddy_new_noddy, METH_VARARGS,
+    {"new_noddy", noddy_new_noddy, METH_NOARGS,
      "Create a new Noddy object."},
-    {NULL, NULL, 0, NULL}
+
+    {NULL}  /* Sentinel */
 };
 
 DL_EXPORT(void)
 initnoddy(void) 
 {
     noddy_NoddyType.ob_type = &PyType_Type;
+    if (PyType_Ready(&noddy_NoddyType))
+        return;
 
-    Py_InitModule("noddy", noddy_methods);
+    Py_InitModule3("noddy", noddy_methods
+                   "Example module that creates an extension type.");
 }