python的 __init__.py文件中使用__all__变量

在Python的包(Package)中,init.py文件可以被用作初始化包的脚本。这个文件会在包被导入时自动执行。同时,init.py文件中的__all__变量也可以被用来限制包中可导入的模块、类或方法。具体来说,__all__变量应该是一个列表或元组,包含了包中公开的API。

在Python中,通过在导入语句中使用from package import *的方式,可以将一个包中所有可导入的模块、类或方法全部导入到当前命名空间中。但是,这种方式会将包中所有未公开的API也一起导入,可能会导致不必要的命名冲突、资源浪费和代码污染等问题。

因此,在__init__.py文件中使用__all__变量可以控制导入的API。如果__all__变量不存在,则from package import *语句会导入所有可见的名称。如果__all__变量存在,则只会导入__all__变量中指定的名称。

例如,假设我们有一个名为my_package的包,其中包含两个模块module1和module2。如果我们只想公开module1中的MyClass类,并防止其他的API被导入,我们可以在__init__.py文件中添加如下代码:

__all__ = ['MyClass']
from .module1 import MyClass

这样,当其他人使用from my_package import *时,只会导入MyClass类,而module2中的其他API不会被导入,从而确保了代码的简洁性、可读性和健壮性。

示例
├── my_package
│ ├── init.py
│ ├── module1.py
│ ├── module2.py

└── test.py

# __init__.py

__all__ = ["MyClass", "my_function"]

from .module1 import MyClass
from .module2 import my_function

module1.py

class MyClass:
    
    def my_method(self):
        print("Hello, I'm an instance of MyClass!")

module2.py

def my_function():
    print("Hello from my_function!")

test.py

from my_package import *

my_object = MyClass()
my_object.my_method()   # Output: "Hello, I'm an instance of MyClass!"
my_function()

python的 __init__.py文件中使用__all__变量_第1张图片
这里使用 pydoc用来确认模块是否生成导入成功

pydoc是Python自带的一个文档生成工具,可以生成Python代码的文档。pydoc可以为Python模块、类和函数生成文档,并以各种格式(如HTML、text、man等)显示文档。

以下是一些常见的pydoc使用方法:

显示模块的文档:在终端中运行pydoc module_name,其中module_name是要查看文档的模块的名称。例如,要查看math模块的文档,可以运行pydoc math。

显示函数的文档:在终端中运行pydoc module_name.function_name,其中module_name是包含要查看文档的函数的模块的名称,function_name是要查看文档的函数的名称。例如,要查看math模块中的sin函数的文档,可以运行pydoc math.sin。

生成HTML格式的文档:在终端中运行pydoc -w module_name,其中module_name是要生成文档的模块的名称。例如,要为math模块生成HTML格式的文档,可以运行pydoc -w math。生成的文档将保存在当前目录下的module_name.html文件中。

显示pydoc的帮助:在终端中运行pydoc -h。

你可能感兴趣的:(python,python,开发语言)