[2] | 1 |
|
---|
| 2 | /* Class object interface */
|
---|
| 3 |
|
---|
| 4 | /* Revealing some structures (not for general use) */
|
---|
| 5 |
|
---|
| 6 | #ifndef Py_CLASSOBJECT_H
|
---|
| 7 | #define Py_CLASSOBJECT_H
|
---|
| 8 | #ifdef __cplusplus
|
---|
| 9 | extern "C" {
|
---|
| 10 | #endif
|
---|
| 11 |
|
---|
| 12 | typedef struct {
|
---|
| 13 | PyObject_HEAD
|
---|
| 14 | PyObject *cl_bases; /* A tuple of class objects */
|
---|
| 15 | PyObject *cl_dict; /* A dictionary */
|
---|
| 16 | PyObject *cl_name; /* A string */
|
---|
| 17 | /* The following three are functions or NULL */
|
---|
| 18 | PyObject *cl_getattr;
|
---|
| 19 | PyObject *cl_setattr;
|
---|
| 20 | PyObject *cl_delattr;
|
---|
[391] | 21 | PyObject *cl_weakreflist; /* List of weak references */
|
---|
[2] | 22 | } PyClassObject;
|
---|
| 23 |
|
---|
| 24 | typedef struct {
|
---|
| 25 | PyObject_HEAD
|
---|
| 26 | PyClassObject *in_class; /* The class object */
|
---|
| 27 | PyObject *in_dict; /* A dictionary */
|
---|
| 28 | PyObject *in_weakreflist; /* List of weak references */
|
---|
| 29 | } PyInstanceObject;
|
---|
| 30 |
|
---|
| 31 | typedef struct {
|
---|
| 32 | PyObject_HEAD
|
---|
| 33 | PyObject *im_func; /* The callable object implementing the method */
|
---|
| 34 | PyObject *im_self; /* The instance it is bound to, or NULL */
|
---|
| 35 | PyObject *im_class; /* The class that asked for the method */
|
---|
| 36 | PyObject *im_weakreflist; /* List of weak references */
|
---|
| 37 | } PyMethodObject;
|
---|
| 38 |
|
---|
| 39 | PyAPI_DATA(PyTypeObject) PyClass_Type, PyInstance_Type, PyMethod_Type;
|
---|
| 40 |
|
---|
| 41 | #define PyClass_Check(op) ((op)->ob_type == &PyClass_Type)
|
---|
| 42 | #define PyInstance_Check(op) ((op)->ob_type == &PyInstance_Type)
|
---|
| 43 | #define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type)
|
---|
| 44 |
|
---|
| 45 | PyAPI_FUNC(PyObject *) PyClass_New(PyObject *, PyObject *, PyObject *);
|
---|
| 46 | PyAPI_FUNC(PyObject *) PyInstance_New(PyObject *, PyObject *,
|
---|
| 47 | PyObject *);
|
---|
| 48 | PyAPI_FUNC(PyObject *) PyInstance_NewRaw(PyObject *, PyObject *);
|
---|
| 49 | PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *, PyObject *);
|
---|
| 50 |
|
---|
| 51 | PyAPI_FUNC(PyObject *) PyMethod_Function(PyObject *);
|
---|
| 52 | PyAPI_FUNC(PyObject *) PyMethod_Self(PyObject *);
|
---|
| 53 | PyAPI_FUNC(PyObject *) PyMethod_Class(PyObject *);
|
---|
| 54 |
|
---|
| 55 | /* Look up attribute with name (a string) on instance object pinst, using
|
---|
| 56 | * only the instance and base class dicts. If a descriptor is found in
|
---|
| 57 | * a class dict, the descriptor is returned without calling it.
|
---|
| 58 | * Returns NULL if nothing found, else a borrowed reference to the
|
---|
| 59 | * value associated with name in the dict in which name was found.
|
---|
| 60 | * The point of this routine is that it never calls arbitrary Python
|
---|
| 61 | * code, so is always "safe": all it does is dict lookups. The function
|
---|
| 62 | * can't fail, never sets an exception, and NULL is not an error (it just
|
---|
| 63 | * means "not found").
|
---|
| 64 | */
|
---|
| 65 | PyAPI_FUNC(PyObject *) _PyInstance_Lookup(PyObject *pinst, PyObject *name);
|
---|
| 66 |
|
---|
| 67 | /* Macros for direct access to these values. Type checks are *not*
|
---|
| 68 | done, so use with care. */
|
---|
| 69 | #define PyMethod_GET_FUNCTION(meth) \
|
---|
| 70 | (((PyMethodObject *)meth) -> im_func)
|
---|
| 71 | #define PyMethod_GET_SELF(meth) \
|
---|
| 72 | (((PyMethodObject *)meth) -> im_self)
|
---|
| 73 | #define PyMethod_GET_CLASS(meth) \
|
---|
| 74 | (((PyMethodObject *)meth) -> im_class)
|
---|
| 75 |
|
---|
| 76 | PyAPI_FUNC(int) PyClass_IsSubclass(PyObject *, PyObject *);
|
---|
| 77 |
|
---|
| 78 | PyAPI_FUNC(int) PyMethod_ClearFreeList(void);
|
---|
| 79 |
|
---|
| 80 | #ifdef __cplusplus
|
---|
| 81 | }
|
---|
| 82 | #endif
|
---|
| 83 | #endif /* !Py_CLASSOBJECT_H */
|
---|