AttributeError:'模块'对象没有属性' xxxx'

时间:2017-11-16 06:55:18

标签: python module package attributeerror

在当前的工作目录中:

foo包含模块bar.py以及空__init__.py文件。

为了论证,模块bar.py包含以下代码:

def print_message():
    print 'The function print_message() prints this message'

print 'The module \"bar\" prints \"bar\"'

import foo上的预期行为

  1. foo.bar打印The module "bar" prints "bar"
  2. foo.bar.print_message()打印The function print_message() prints this message
  3. 相反,我很难导入bar.py模块:

    • 一方面,使用from foo import bar然后允许呼叫 bar.print_message()

    • 另一方面,如果我import foo,则foo.bar会产生。AttributeError: 'module' object has no attribute 'bar' 标题中的错误:foo.bar.print_message()AttributeError

    • 也是如此

    关于'2019-02-01'.to_date - Date.today # => 442/1 ,到目前为止我所浏览的所有评分最高的问题都是关于模块中某些内容的答案,而不是导入本身。此外,每次尝试之间都会重新启动内核。

    问题:这不是一个阻塞点,但它让我不理解这种行为。我很缺乏经验,所以我在这里缺少什么基本概念? 谢谢,

1 个答案:

答案 0 :(得分:5)

当你导入foo时,你只是导入了包而不是任何模块,所以当你调用bar时,它会在 init .py文件中查找bar,而且该文件没有&#39 ;有吧。如果你没有将bar导入模块全局命名空间,它就不知道是什么吧,这就是你遇到错误的原因。

import foo
print(dir(foo)) # ['__builtins__', ...,'__spec__', 'print_message']
from foo import bar
print(dir(foo)) # ['__builtins__',..., 'bar', 'print_message']

您可以将from . import bar添加到 init .py文件中。当导入时运行 init .py文件时,这会让foo知道bar。 https://docs.python.org/3/tutorial/modules.html有一些关于模块和软件包的信息,这篇帖子中有一些非常好的信息Importing packages in Python