What if there was a general mechanism to allow operators to be implemented by 
user code that does not belong to the class?

If the name [e.g.] __operatorhook_or__ is defined anywhere in a module, within 
that module all calls to that operator are replaced with a two-step process:

call __operatorhook_or__(dict1, dict2)
if it returns a value, use that value
if it returns NotImplemented use the ordinary operator lookup process, i.e. 
dict1.__or__ and dict2.__ror___
[if __operatorhook_or__ is not defined, treat the same as if it had returned 
NotImplemented]

Then a user could simply do:

def __operatorhook_or__(obj1, obj2):
    if isinstance(obj1, dict) and isinstance(obj2, dict):
        return {**obj1, **obj2}
    return NotImplemented

def __operatorhook_ior__(obj1, obj2):
    if isinstance(obj1, dict):
        obj1.update(obj2)
        return obj1
    return NotImplemented
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/HTIMLFXLJ22IHLDSZL3N4XPSKNP3WWQL/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to