1 typedef struct _typeobject { 2 PyObject_VAR_HEAD 3 char *tp_name; /* For printing, in format "<module>.<name>" */ 4 int tp_basicsize, tp_itemsize; /* For allocation */ 5 6 /* Methods to implement standard operations */ 7 8 destructor tp_dealloc; 9 printfunc tp_print; 10 getattrfunc tp_getattr; 11 setattrfunc tp_setattr; 12 cmpfunc tp_compare; 13 reprfunc tp_repr; 14 15 /* Method suites for standard classes */ 16 17 PyNumberMethods *tp_as_number; 18 PySequenceMethods *tp_as_sequence; 19 PyMappingMethods *tp_as_mapping; 20 21 /* More standard operations (here for binary compatibility) */ 22 23 hashfunc tp_hash; 24 ternaryfunc tp_call; 25 reprfunc tp_str; 26 getattrofunc tp_getattro; 27 setattrofunc tp_setattro; 28 29 /* Functions to access object as input/output buffer */ 30 PyBufferProcs *tp_as_buffer; 31 32 /* Flags to define presence of optional/expanded features */ 33 long tp_flags; 34 35 char *tp_doc; /* Documentation string */ 36 37 /* Assigned meaning in release 2.0 */ 38 /* call function for all accessible objects */ 39 traverseproc tp_traverse; 40 41 /* delete references to contained objects */ 42 inquiry tp_clear; 43 44 /* Assigned meaning in release 2.1 */ 45 /* rich comparisons */ 46 richcmpfunc tp_richcompare; 47 48 /* weak reference enabler */ 49 long tp_weaklistoffset; 50 51 /* Added in release 2.2 */ 52 /* Iterators */ 53 getiterfunc tp_iter; 54 iternextfunc tp_iternext; 55 56 /* Attribute descriptor and subclassing stuff */ 57 struct PyMethodDef *tp_methods; 58 struct PyMemberDef *tp_members; 59 struct PyGetSetDef *tp_getset; 60 struct _typeobject *tp_base; 61 PyObject *tp_dict; 62 descrgetfunc tp_descr_get; 63 descrsetfunc tp_descr_set; 64 long tp_dictoffset; 65 initproc tp_init; 66 allocfunc tp_alloc; 67 newfunc tp_new; 68 freefunc tp_free; /* Low-level free-memory routine */ 69 inquiry tp_is_gc; /* For PyObject_IS_GC */ 70 PyObject *tp_bases; 71 PyObject *tp_mro; /* method resolution order */ 72 PyObject *tp_cache; 73 PyObject *tp_subclasses; 74 PyObject *tp_weaklist; 75 76 } PyTypeObject; 77