Last active
May 17, 2019 06:30
-
-
Save space-cadet/1106bac4e90df09733c11541e6bd87c3 to your computer and use it in GitHub Desktop.
Custom types in Python 3.7. Source code taken from https://docs.python.org/3.7/extending/newtypes.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Source: https://docs.python.org/3.7/extending/newtypes.html | |
typedef struct _typeobject { | |
PyObject_VAR_HEAD | |
const char *tp_name; /* For printing, in format "<module>.<name>" */ | |
Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */ | |
/* Methods to implement standard operations */ | |
destructor tp_dealloc; | |
printfunc tp_print; | |
getattrfunc tp_getattr; | |
setattrfunc tp_setattr; | |
PyAsyncMethods *tp_as_async; /* formerly known as tp_compare (Python 2) | |
or tp_reserved (Python 3) */ | |
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 */ | |
unsigned long tp_flags; | |
const 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 */ | |
Py_ssize_t tp_weaklistoffset; | |
/* Iterators */ | |
getiterfunc tp_iter; | |
iternextfunc tp_iternext; | |
/* Attribute descriptor and subclassing stuff */ | |
struct PyMethodDef *tp_methods; | |
struct PyMemberDef *tp_members; | |
struct PyGetSetDef *tp_getset; | |
struct _typeobject *tp_base; | |
PyObject *tp_dict; | |
descrgetfunc tp_descr_get; | |
descrsetfunc tp_descr_set; | |
Py_ssize_t tp_dictoffset; | |
initproc tp_init; | |
allocfunc tp_alloc; | |
newfunc tp_new; | |
freefunc tp_free; /* Low-level free-memory routine */ | |
inquiry tp_is_gc; /* For PyObject_IS_GC */ | |
PyObject *tp_bases; | |
PyObject *tp_mro; /* method resolution order */ | |
PyObject *tp_cache; | |
PyObject *tp_subclasses; | |
PyObject *tp_weaklist; | |
destructor tp_del; | |
/* Type attribute cache version tag. Added in version 2.6 */ | |
unsigned int tp_version_tag; | |
destructor tp_finalize; | |
} PyTypeObject; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment