美文网首页
python 让对象支持上下文管理协议

python 让对象支持上下文管理协议

作者: 孙广宁 | 来源:发表于2022-05-27 23:48 被阅读0次
    8.3 通过with语句出发,让对象支持上下文管理协议
    • 需要实现 enter 、exit 方法
    >>> from socket import socket,AF_INET,SOCK_STREAM
    >>> class LC:
    ...     def __init__(self,address,family=AF_INET,type=SOCK_STREAM):
    ...         self.address=address
    ...         self.family=AF_INET
    ...         self.type=SOCK_STREAM
    ...         self.sock=None
    ...     def __enter__(self):
    ...         if self.sock is not None:
    ...             raise RuntimeError("Already connected")
    ...         self.sock = sock(self.family,self.type)
    ...         self.sock.connect(self.address)
    ...         return self.sock
    ...     def __exit__(self,exc_ty,exc_val,tb):
    ...         self.sock.close()
    ...         self.sok = None
    ...
    
    • 这个类的核心功能就是建立一条网络连接,但是在初始状态下,并不会建立连接
    • 网络连接可以通过with语句来建立和close,示例如下
    >>> from functools import partial
    >>> con = LC("www.baidu.com",80)
    >>> with con as s:
    ...     s.send(b'GET /index.html HTTP/1.0\r\n')
    ...     s.send(b'HOST: www.baidu.com\r\n')
    ...     s.send(b'\r\n')
    ...     resp = b''.join(iter(partial(s.recv,8192),b''))
    ...
    

    相关文章

      网友评论

          本文标题:python 让对象支持上下文管理协议

          本文链接:https://www.haomeiwen.com/subject/uyobprtx.html