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

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''))
...
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值