Python __doc__ 与 __file__ 属性

文摘   科技   2024-10-17 14:41   上海  

点击蓝字,关注山海摸鱼人

目录:

  1. 什么是 __doc__ 属性?
  2. 使用 help() 获取帮助
  3. 什么是 __file__ 属性?
  4. 创建自定义文档化的库
  5. 自定义包示例

在Python中,__doc__属性用于查看模块文档,__file__属性用于查看模块的源文件路径。

什么是 __doc__ 属性?

__doc__ 是一个特殊的属性,它存储了对象(如函数、类或模块)的文档字符串(通常称为 "docstring")。这个文档字符串可以是多行文本,用于描述该对象的功能、参数和返回值等信息。通过 __doc__ 属性,你可以轻松地访问这些文档字符串,从而快速了解对象的用途和用法。

例如:

def greet(name):
    """
    输出一条欢迎信息。

    参数:
        name (str): 要欢迎的人的名字。
    """

    print(f"你好, {name}!")

# 访问 greet 函数的文档字符串
print(greet.__doc__)

输出:

输出一条欢迎信息。

参数:
    name (str): 要欢迎的人的名字。

使用 help() 获取帮助

除了直接通过 __doc__ 属性访问文档字符串之外,你还可以使用内置的 help() 函数来查看更详细的帮助信息。help() 不仅会显示文档字符串,还会包含有关对象类型的信息。例如:

import my_package

# 获取 my_package.module1.display 的帮助信息
help(my_package.module1.display)

输出类似于:

Help on function display in module my_package.module1:

display(arc)
    直接输出指定的参数

可以看到,help() 提供了关于 display 函数的额外上下文信息,比如它是从哪个模块导入的。

什么是 __file__ 属性?

__file__ 属性是一个特殊属性,它提供了当前模块的文件路径。这对于调试和理解模块的位置非常有用。例如,如果你有一个名为 my_module.py 的模块,并且你想知道它的绝对路径,可以使用 __file__ 属性。

import my_module

# 查看 my_module 模块的源文件路径
print(my_module.__file__)

假设 my_module.py 位于 /home/user/projects/my_project/ 目录下,那么输出可能是:

/home/user/projects/my_project/my_module.py

创建自定义文档化的库

让我们假设你正在开发一个用于处理日期时间的小型库。在这个库中,你会定义一些实用函数,并且希望用户能够轻松地了解如何使用它们。这时 __doc____file__ 就派上了用场。

首先,我们创建一个新的文件 datetime_utils.py,并在其中编写几个函数:

# datetime_utils.py

from datetime import datetime

def get_current_time(format='%Y-%m-%d %H:%M:%S'):
    """
    返回当前时间的格式化字符串。

    参数:
        format (str): 时间格式,默认为 '%Y-%m-%d %H:%M:%S'。

    返回:
        str: 格式化后的当前时间。
    """

    return datetime.now().strftime(format)

def days_between_dates(date1, date2):
    """
    计算两个日期之间的天数差。

    参数:
        date1 (str): 第一个日期,格式如 'YYYY-MM-DD'。
        date2 (str): 第二个日期,格式如 'YYYY-MM-DD'。

    返回:
        int: 两个日期间的天数差异。
    """

    d1 = datetime.strptime(date1, '%Y-%m-%d')
    d2 = datetime.strptime(date2, '%Y-%m-%d')
    delta = abs((d2 - d1).days)
    return delta

现在我们可以使用 help()__doc__ 来查看这些函数的文档:

import datetime_utils

# 查看 get_current_time 的帮助
print(datetime_utils.get_current_time.__doc__)

# 或者使用 help()
help(datetime_utils.days_between_dates)

自定义包示例:my_package

回到我们之前提到的 my_package 例子,我们现在将创建一个完整的包结构,并展示如何利用 __doc____file__ 来提高代码的可读性和可用性。

首先,在你的工作目录下创建如下文件结构:

my_package/
├── __init__.py
├── module1.py
└── module2.py

然后在每个文件中添加内容:

__init__.py:

# my_package/__init__.py
from .module1 import *
from .module2 import *

module1.py:

# my_package/module1.py
def display(message):
    """
    打印传入的消息。

    参数:
        message (str): 要打印的消息。
    """

    print(message)

module2.py:

# my_package/module2.py
class CLanguage:
    """
    代表C语言相关的操作。

    包含方法:
        - display(): 显示C语言教程链接。
    """


    def display(self):
        """显示C语言教程链接"""
        print("http://c.biancheng.net/python/")

接下来,我们可以像下面这样测试我们的包:

import my_package

# 测试 module1 中的 display 函数
my_package.display("这是来自 module1 的问候!")

# 创建 CLanguage 实例并调用 display 方法
c_lang = my_package.CLanguage()
c_lang.display()

# 检查文档
print(my_package.module1.display.__doc__)
help(my_package.module2.CLanguage)

# 查看模块的源文件路径
print(my_package.module1.__file__)
print(my_package.module2.__file__)

这段代码将演示如何从外部使用 my_package 包,并且通过 __doc__help() 函数展示了内部成员的帮助信息。同时,通过 __file__ 属性,我们可以看到各个模块的源文件路径。


__doc__ 属性:允许你在定义函数、类或模块时内嵌文档字符串,这些文档字符串可以通过 __doc__ 属性或 help() 函数访问,帮助用户快速了解代码的功能和用法。

__file__ 属性:提供当前模块的文件路径,有助于调试和理解模块的位置。

山海摸鱼人
致力于记录美好之瞬间,追寻美好之明天。
 最新文章