Larry Hastings <la...@hastings.org> writes: > A comment on your approach so far: I'm very much against giving > "default" a default value in the constructor.
You mean in the definition of the custom converter class? > I realize that hack saves you having to say "= NULL" in a lot of > places. But explicit is better than implicit, and we're going to read > these signatures a lot more often than we write them, and I want > Clinic signatures to be easy to read at first glance. [....] > All is not lost! What follows is rough pseudo-C code, hopefully you > can take it from here. > > typedef struct { > int set; > time_t when; > } clinic_time_t; > #define DEFAULT_CLINIC_TIME_T {0, 0} > [...] > > /*[python input] > class clinic_time_t_converter(CConverter): > type = 'clinic_time_t' > converter = 'parse_clinic_time_t' > c_default = 'DEFAULT_CLINIC_TIME_T' > [python start generated code]*/ > /*[python end generated code: checksum=...]*/ > > Now you can use clinic_time_t. Parameters declared clinic_time_t can > be required, or they can be optional; if they're optional give them a > default value of None. That doesn't work. If the default value is declared for the function rather than in the converter definition, it overwrites the C default: /*[clinic input] time.gmtime seconds: clinic_time_t=None / */ gives: static PyObject * time_gmtime(PyModuleDef *module, PyObject *args) { PyObject *return_value = NULL; clinic_time_t seconds = Py_None; if (!PyArg_ParseTuple(args, "|O&:gmtime", parse_clinic_time_t, &seconds)) goto exit; return_value = time_gmtime_impl(module, seconds); so the default for seconds is now Py_None instead of DEFAULT_CLINIC_TIME_T'. Best, Nikolaus -- Encrypted emails preferred. PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6 02CF A9AD B7F8 AE4E 425C »Time flies like an arrow, fruit flies like a Banana.« _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com