To solve the problem of short-circuiting 'and' and 'or', the BooleanMethod class could be tested for non zero method components, ie, you befine the methods to null, like PyBooleanMethods { binaryfunc bl_and; binaryfunc bl_or; binaryfunc bl_not; } PyBooleanMethods; static PyBooleanMethods default_as_boolean = { 0, /* bl_and */ 0, /* bl_or */ 0, /* bl_not */ }; and overwrite them only when the __land__, __lor__ or __lnot__ are defined. Then, when you perfom the 'add' or 'or' operations, you check for the proper boolean method in the first argument only, which anyway have to be evaluated. If the boolean method exists, then you force the evaluation of the second argument and the apply the proper method. If not, you do the usual, which will be the traditional short-circuiting operation, ie: a and b will be equivalent to if a.bl_and exist: return a.bl_and(b) else return a && b (traditional form with short-circuiting) and similar for 'or'. In this way, the implementation will be fully compatible with all the previous code, allowing short-circuiting for the classes that doesn't define the boolean methods (all of them by now), but will allow you to extend the operation for classes with their own version of the logical operations. Of course this requires that if you want to use your own logical operations, both or at least the first argument in the operation must always be one of your special classes. But with proper documentations and warnings about it, I guess this alternative is better than nothing. Marcelo
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