It may help to think separately about existing code using ssl, and about new code. However, I'm not a user of ssl, so please doubt my opinions below.

Those maintaining existing code might welcome an easy way of checking that the code doesn't have a misleading assignment. They might also appreciate a quick fix, such as using a subclass of type(context) that does have __slots__. (Such devices might not work well with all existing code.)

Those creating new code might appreciate a new API that has been redesigned to simplify the interface and better support security audits. For example:

    >>> context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    >>> context
    <ssl.SSLContext object at 0x7f3c7d357fa8>

Perhaps better is that type(context).__repr__ show the attributes of the context object (and anything inherited from the parent class).

Also, the sample code (in docs ssl.html)

    ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
    ctx.options &= ~ssl.OP_NO_SSLv3

contains bitwise operations whose meaning requires some thought.