1

我的目录中有以下文件:

foo/
  foo.py
  foolib/
    __init__.py
    bar.py

在 __init__.py 中:

__all__ = ["bar"]

在 bar.py 中:

class Bar:
    def __init__(self):
        None
    def hello(self):
        print("Hello World")
        return

def hi():
    print("Hi World")

现在,如果我在 foo.py 中有以下代码:

from foolib import *

bar.hi()

foobar = Bar()
foobar.hello()

打印“Hi World”,但我得到 Bar() 的 NameError。如果我显式导入模块:

from foolib.bar import *

我得到了预期的输出“Hello World”。

有没有办法让我从模块中导入类,而不显式调用它们?我觉得我在 __init__ 文件中遗漏了一些东西。要么就是这样,要么我公然违反了一些 Python 最佳实践。

4

1 回答 1

1

要导入该类,您必须在某处导入该类。当你这样做时from foolib import *,因为你的__init__.pythis 导入了模块bar。它不允许您访问该模块内的任何内容。

如果您想自动访问包中bar的所有内容foolib而无需导入bar,您可以将其放入__init__.py

from bar import *

这使得所有内容都bar可以直接在foolib.

于 2012-08-20T18:55:01.330 回答