我的目录中有以下文件:
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的一些最佳实践。
答案 0 :(得分:1)
要导入该类,您必须在某处导入该类。执行from foolib import *
时,由于您__init__.py
导入模块bar
。它不允许您访问该模块内的任何内容。
如果您希望自动访问bar
包中foolib
中的所有内容而无需导入bar
,则可以将其放入__init__.py
:
from bar import *
这使得bar
中的所有内容都可以直接在foolib
中使用。