On Sun, Sep 20, 2015 at 12:05:52PM +0100, Paul Moore
On 20 September 2015 at 08:31, Steven D'Aprano
wrote: I'm not convinced that we should generalise this beyond the three original examples of attribute access, item lookup and function call. I think that applying ? to arbitrary operators is a case of "YAGNI". Or perhaps, "You Shouldn't Need It".
Agreed.
Does this need to be an operator? How about the following:
class Maybe: def __getattr__(self, attr): return None def __getitem__(self, idx): return None def __call__(self, *args, **kw): return None
def maybe(obj): return Maybe() if obj is None else obj
attr = maybe(obj).spam elt = maybe(obj)[n] result = maybe(callback)(args)
The Maybe class could be hidden, and the Maybe() object a singleton (making my poor naming a non-issue :-)) and if it's felt sufficiently useful, the maybe() function could be a builtin.
Usage of the result of maybe() outside of the above 3 contexts should simply be "not supported" - don't worry about trying to stop people doing weird things, just make it clear that the intent is only to support the 3 given idiomatic usages.
PyMaybe - a Python implementation of the Maybe pattern. Seems to be quite elaborated. https://github.com/ekampf/pymaybe
Paul.
Oleg. -- Oleg Broytman http://phdru.name/ phd@phdru.name Programmers don't die, they just GOSUB without RETURN.