导入模块中包含的类

时间:2012-08-20 18:50:51

标签: python

我的目录中有以下文件:

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的一些最佳实践。

1 个答案:

答案 0 :(得分:1)

要导入该类,您必须在某处导入该类。执行from foolib import *时,由于您__init__.py导入模块bar。它不允许您访问该模块内的任何内容。

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

from bar import *

这使得bar中的所有内容都可以直接在foolib中使用。