Я согласен, что явное применение иерархии типов кажется непифоническим и что вы можете спросить об этом разработчиков.
OTOH, мне интересно, связано ли это с _ssl и _socket, являющимися модулями реализации для ssl и сокета. Я не использовал ssl, и я едва использовал сокет, но действительно ли это обычно необходимо при их прямом использовании _ssl или _socket?
В любом случае, одним из обходных путей может быть прокси-объект, который:
(a) наследует от _socket.socket
(и, следовательно, утверждает, что оно isinstance
из _socket.socket
), но
(b) передает все свои сообщения фактическому объекту, совместимому с «интерфейсом сокета».
Я не тестировал этот код, поэтому надеюсь, что это не заслуживающий внимания вклад:
def socketify( socket_protocol_compliant_object ):
import _socket
class proxy( _socket.socket ):
def __init__( self ): pass
def __getattribute__( self, attr_name ):
return getattr( socket_protocol_compliant_object, attr_name )
def __setattribute__( self, attr_name, new_value ):
setattr( socket_protocol_compliant_object, attr_name, new_value )
return proxy()
self._sslobj = _ssl.sslwrap( socketify(self._sock), server_side, keyfile, ... )
Что думают другие питонисты? Это хорошая идея?