<p>导入模块时,只会将模块的名称添加到本地名称空间中,而不会将模块的所有内容都添加到名称空间中(不过,如果您特别要求的话,也可以获得该名称)</p>
<p>因此,如果您执行<code>import loggingLocal</code>(不需要<code>__init__</code>部分,下面将详细介绍),那么您只会在主模块的命名空间中获得名称<code>loggingLocal</code>。要访问其中的<code>Logger</code>类,需要使用<code>loggingLocal.Logger</code></p>
<p>或者,您可以使用可选的导入语法<code>from some_module import some_name</code>,具体说明要从导入的模块复制到自己的命名空间中的特定名称。在您的情况下,您可能需要<code>from loggingLocal import Logger</code>。如果需要,可以指定多个名称,也可以指定<code>*</code>而不是任何名称,在这种情况下,您将获得模块的<code>__all__</code>属性中列出的任何名称,或者其他模块中名称不以下划线开头的所有全局变量</p>
<p>您的代码中还有其他一些小错误。我在上面提到的一个例子,您在<code>import</code>语句中命名模块名的<code>__init__</code>部分。那是不需要的<code>__init__.py</code>是用于组成包的根部分的模块的文件名。也就是说,<code>foo/__init__.py</code>成为<code>foo</code>模块。如果您出于其他原因不需要包(例如,因为您还有<code>foo/bar.py</code>和<code>foo/baz.py</code>,它们可以作为<code>foo.bar</code>和<code>foo.baz</code>导入),那么您可能不应该使用该结构。相反,只需将<code>localLogging/__init__.py</code>文件重命名为<code>localLogging.py</code>,然后去掉子目录</p>
<p>另一个问题是Logger的实现。当您试图关闭在<code>llog</code>中创建的文件时,实际上并没有成功。您只引用<code>close</code>方法,但从未实际调用它(您可能希望执行<code>llog_f.close()</code>)。我建议使用<code>with</code>语句来处理文件的打开和关闭:</p>
<pre><code>with open(file, "a") as llog_f:
llog_f.write("\n" + typeM + ": " + message)
</code></pre>
<p>此代码将自动关闭<code>with</code>语句后面缩进块末尾的文件。如果有异常导致块以异常方式退出,它甚至会关闭文件</p>