<p>既然你用更多的细节更新了你的问题,而且它与原来的大不相同,我想再加一个答案。在</p>
<p><strong>AsyncHTTPClient背后的魔力</strong></p>
<p>考虑以下代码:</p>
<pre><code>http_client = AsyncHTTPClient()
print(http_client.__class__)
# Output:
<class 'tornado.simple_httpclient.SimpleAsyncHTTPClient'>
</code></pre>
<p>如您所见,<code>http_client</code>是<code>SimpleAsyncHTTPClient</code>的实例,而不是{<cd3>}。那么,这是怎么回事?在</p>
<p>如果您查看<a href="https://github.com/tornadoweb/tornado/blob/master/tornado/httpclient.py#L109" rel="nofollow noreferrer">^{<cd3>}</a>的源代码,您将看到它继承了<code>tornado.utils.Configurable</code>类。在</p>
<p><code>Configurable</code>类中最重要的一段代码是<code>__new__</code>方法,它负责所有的魔术。如果您查看它的<a href="https://github.com/tornadoweb/tornado/blob/master/tornado/util.py#L295-L313" rel="nofollow noreferrer">source code</a>,您会发现它将为类方法<code>configurable_default</code>返回的任何类创建一个实例。在</p>
<p>现在,看看<a href="https://github.com/tornadoweb/tornado/blob/master/tornado/httpclient.py#L151-L154" rel="nofollow noreferrer">^{<cd9>}</a>的源代码。它返回<code>SimpleAsyncHTTPClient</code>类,这就是为什么我们上面创建的对象(<code>http_client</code>)是<code>SimpleAsyncHTTPClient</code>的实例,而不是{<cd3>}的实例。在</p>
<p>最后,是的,您是对的,您需要在子类中创建<code>fetch_impl</code>方法。因为<code>AsyncHTTPClient</code>将调用<code>self.fetch_impl</code>方法。您可以在<a href="https://github.com/tornadoweb/tornado/blob/master/tornado/httpclient.py#L263" rel="nofollow noreferrer">this line in source code</a>中看到这一点。在</p>
<p>虽然,<code>fetch_impl</code>没有在<code>AsyncHTTPClient</code>类中实现,但它已经在<code>SimpleAsyncHTTPClient</code>中实现。你可以找到它<a href="https://github.com/tornadoweb/tornado/blob/master/tornado/simple_httpclient.py#L111-L126" rel="nofollow noreferrer">here</a>。在</p>
<hr/>
<p><strong>如何成功子类<code>AsyncHTTPClient</code>?</strong></p>
<p>{我需要先看看你的西装。在</p>