擅长:python、mysql、java
<p>Python在导入包时执行以下操作:</p>
<ul>
<li>在<code>sys.modules</code>中为包创建一个对象,名称为key:<code>'pywmlx'</code>、<code>'pywmlx.state'</code>、<code>'pywmlx.state.machine'</code>等</li>
<li>运行为该模块加载的字节码;这可能会创建更多模块。</li>
<li>一旦一个模块被完全加载并且位于另一个包中,将该模块设置为父模块对象的属性。因此,<code>sys.modules['pywmlx.state']</code>模块被设置为<code>sys.modules['pywmlx']</code>模块对象的<code>state</code>属性。</li>
</ul>
<p>在您的示例中,最后一步尚未执行,但以下行仅在设置后才起作用:</p>
<pre><code>import pywmlx.state.machine as statemachine
</code></pre>
<p>因为这首先将<code>state</code>和<code>machine</code>作为属性查找。请改用此语法:</p>
<pre><code>from pywmlx.state import machine as statemachine
</code></pre>
<p>或者,使用</p>
<pre><code>import pywmlx.state.machine
</code></pre>
<p>把<code>statemachine.</code>替换成<code>pywmlx.state.machine.</code>。这是因为添加到命名空间中的所有内容都是对<code>sys.modules['pywmlx']</code>模块对象的引用,在函数和方法中使用该引用之前,不需要解析属性引用。</p>