将子文件夹 python 文件导入为文件夹(包),而不是模块
Import subfoldered python files as a folder (package), not as a module
是否可以在 from ... import gui
之后调用函数 gui.settings.load()
?我正在尝试设置这样的文件夹。
main.py
gui/
__init__.py
settings.py
并且在settings.py
def load():
print('Hello')
在main.py
import gui
gui.settings.load()
我必须和 __init__.py
打交道吗?
现在,我必须将文件命名为 guiSettings.py
,我想让它更简单。
根据您的定义加载不是一个函数,它是一个 class,所以您不能这样调用(class 意味着要实例化,您应该查看 OOP 概念)。如果你想调用函数 "load" 你应该将它定义为:
def load(parameters):
#function body
#optional return statement
并将目录作为模块进行交互 e.i。使用点符号。该目录应包含一个 __init__.py
文件。根据文档:
Packages are a way of structuring Python’s module namespace by using
“dotted module names”. For example, the module name A.B designates a
submodule named B in a package named A.
另外:
The __init__.py
files are required to make Python treat the
directories as containing packages;
所以在你的情况下你应该在外部 gui 目录和内部 gui 目录中定义 "__init__.py"
(可能是空的)。然后在设置模块中,您可以像上面那样定义加载函数。你可以在这里阅读更多关于包和模块的信息 https://www.tutorialspoint.com/python/python_modules.htm
如果我真的想调用 gui.settings.load()
,我可能会像这样构建我的目录。
main.py
src/
__init__.py
gui/
__init__.py
settings.py
在main.py
from src import *
gui.settings.load()
在src/__init__.py
from . import gui
在src/gui/__init__.py
from . import settings
在src/gui/settings.py
还是和上面一样
似乎将 __all__ = ['gui']
和 __all__ = ['settings']
分别放在 __init__.py
中是行不通的,除非我误解了 __all__
的工作原理。
此外,在这种情况下 __init__.py
不能为空。
此外,在 main.py
.
中不带 from
只放 import *
是行不通的
是否可以在 from ... import gui
之后调用函数 gui.settings.load()
?我正在尝试设置这样的文件夹。
main.py
gui/
__init__.py
settings.py
并且在settings.py
def load():
print('Hello')
在main.py
import gui
gui.settings.load()
我必须和 __init__.py
打交道吗?
现在,我必须将文件命名为 guiSettings.py
,我想让它更简单。
根据您的定义加载不是一个函数,它是一个 class,所以您不能这样调用(class 意味着要实例化,您应该查看 OOP 概念)。如果你想调用函数 "load" 你应该将它定义为:
def load(parameters):
#function body
#optional return statement
并将目录作为模块进行交互 e.i。使用点符号。该目录应包含一个 __init__.py
文件。根据文档:
Packages are a way of structuring Python’s module namespace by using “dotted module names”. For example, the module name A.B designates a submodule named B in a package named A.
另外:
The
__init__.py
files are required to make Python treat the directories as containing packages;
所以在你的情况下你应该在外部 gui 目录和内部 gui 目录中定义 "__init__.py"
(可能是空的)。然后在设置模块中,您可以像上面那样定义加载函数。你可以在这里阅读更多关于包和模块的信息 https://www.tutorialspoint.com/python/python_modules.htm
如果我真的想调用 gui.settings.load()
,我可能会像这样构建我的目录。
main.py
src/
__init__.py
gui/
__init__.py
settings.py
在main.py
from src import *
gui.settings.load()
在src/__init__.py
from . import gui
在src/gui/__init__.py
from . import settings
在src/gui/settings.py
还是和上面一样
似乎将 __all__ = ['gui']
和 __all__ = ['settings']
分别放在 __init__.py
中是行不通的,除非我误解了 __all__
的工作原理。
此外,在这种情况下 __init__.py
不能为空。
此外,在 main.py
.
from
只放 import *
是行不通的