I brought up a topic earlier and am now taking a different slant.
I am thinking of the wisdom of having a protocol on announcing what protocols you implement. Python has many protocols that are now part of the language and I suspect many more will arise. Python already has a series of variables stored in classes or instances that store lists or dictionaries of THINGS and I won't mention them in details as they are numerous and often mysterious. So I wondered what people thought of the general idea of adding one more with some name like __PROTOCOLS__ that could be stored at something like the class level. Here are examples of one person listing what they consider protocols: https://ref.readthedocs.io/en/latest/understanding_python/interfaces/existin g_protocols.html https://stephensugden.com/crash_into_python/Protocols.html When an object implements a protocol such as being callable, that generally means they provide a method in the name __call__ which is simple enough to check for if you know where to look. But the sequence protocol may require quite a few such methods to be fully implemented and testing for dunders len, getitem, setitem, delitem, reversed, contains, getslice, setslice, and delslice may be a bit much. So what if the powers that be that determine the fate of python come up with a meta protocol. All protocols would be given a NAME for official purposes. The two examples might become "callable" and "sequence" and the meaning of saying you properly provide a protocol would be well documented. So if someone creates an object, part of the process might be to add entries for each protocol you declare you properly support to something like the __PROTOCOLS__ variable. How to do so is an implementation decision but it could be as easy as adding a method to the top class "object" than any subclass can inherit and use to declare one or more protocols in use. You might also add another method like has_protocol(name) that returns True if it is registered. As a programmer, you might no longer need to know the details to see if something is in some category. Rather than checking for the presence of various dunderheads, you simply ask if a protocol is implemented and then use it. I am not sure anything like this is wanted or practical and am asking if people have already suggested something along these lines or whether it would even be something worth doing or practical. I can think of many complications starting with what happens if someone lies and continuing with what happens if a class inherits from multiple other classes but some methods are over-ridden or no longer the first one found in the MRO search. Of course, it would also be nice if there was also a tool that could be used by developers to validate claims to implement a protocol before run-time either in a shallow way (the right names are defined) or a deeper way by exercising the functionality to see it does what is expected. That, too, leads to me wondering how this could work as the above reference suggests the copy protocol contains both a __copy__() and a __deepcopy__() and I can imagine having just the first. When I say PROTOCOL, I mean it in a very broad sense. For example, what makes an object type IMMUTABLE? What makes the contents of an object INVISIBLE as in you use techniques so the only way to gain access to the hidden internals of an object is through various kinds of proxies that keep you from actually seeing what is going on. Such aspects may not have an exact protocol but if you want to use something as a key in a dictionary maybe it will be happy to allow it if it thinks you are of an immutable type. Other functionality may refuse to work with objects not deemed invisible for privacy concerns. Again. Not a serious proposal just wondering if my thought process is flawed deeply or am I just shallow. -- https://mail.python.org/mailman/listinfo/python-list