Chr*_*her 6 python inheritance super python-requests
我在requests模块的源头四处寻找,并注意到这段代码:
class Response(object):
"""The :class:`Response <Response>` object, which contains a
server's response to an HTTP request.
"""
def __init__(self):
super(Response, self).__init__()
... more init method...
Run Code Online (Sandbox Code Playgroud)
我的理解super()表明这个电话根本不会做任何事情.我发现相当的几个问题,关于超通话,但其他类的子类,但并非所有的工作object本身.在python文档,也没有提及这种结构.
在我看来,这可能只是一个错误,如果您git blame将该文件提交给引入该行的提交,您将看到在作者身份时,它Response是一个子类BaseResponse.该行只是一个类重构的延续,还是这个super()调用做了什么呢?
正如科利·布里格曼的评论中提到的中提到的,这是不必要的,但无害。
对于一些背景知识,该类BaseResponse是在 Kenneth 的 Requests 1.0 冲刺期间添加的。1.0 代码更改引入了传输适配器,这使得可以为某些 HTTP 端点(或者实际上是非 HTTP 端点)定义特定行为。Transport Adapter 接口的一个重要部分是该HTTPAdapter.build_response()方法,它获取返回的原始响应HTTPAdapter.send()并构建一个 RequestsResponse并从中
很明显,Kenneth 看到了为 s 提供某种形式的抽象基类的潜在实用性,这将允许传输适配器以与标准 HTTP 非常不同的行为Response返回sResponseResponse对象。出于这个原因,将大部分逻辑重构为 ABC 并在子类中似乎是有意义的。
后来在重构中,由于不必要的复杂性,这一点再次被取消。现实情况是,想要定义专门Response对象的人们可以简单地子类化Response,而不是拥有一个什么也不做的 ABC 。这使得代码中的主线用例(普通请求)更加清晰,并且几乎没有实用性。
当BaseRequest类被删除时,这条线被忽略了,但由于它不会引起任何问题,所以从来不需要删除它。
| 归档时间: |
|
| 查看次数: |
1406 次 |
| 最近记录: |