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;
|
---|
21 | PyObject *cl_weakreflist; /* List of weak references */
|
---|
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 */
|
---|