In Boost.Python, extension class instance dictionaries are created only on-demand. It's an obvious win for lots of wrapped C++ class instances, which will never have Python attributes tacked on. This also seems like a potential big win for some kinds of Python instances, like those which use __slots__ but may also have a dictionary (IIRC that is a possible configuration). The code to do this in Boost.Python is small and "just works" transparently, so I thought there might be some interest here for the Python core: I've "C-ified" the code here, sort of on-the-fly, just to give an idea, but it's so simple that any errors can't obscure the intent /too/ much ;-) static PyObject* instance_get_dict(PyObject* op, void*) { bpl_instance* inst = (bpl_instance*)op; if (inst->dict == 0) inst->dict = PyDict_New(); Py_XINCREF(inst->dict); return inst->dict; } static int instance_set_dict(PyObject* op, PyObject* dict, void*) { (bpl_instance)* inst = (bpl_instance*)op; Py_XDECREF(inst->dict); Py_XINCREF(dict); inst->dict = dict return 0; } static PyGetSetDef instance_getsets[] = { /* used as tp_getset */ {"__dict__", instance_get_dict, instance_set_dict, NULL}, {0} }; Useful? -Dave -- David Abrahams dave@boost-consulting.com * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4