目录:
什么是 __doc__
属性?使用 help()
获取帮助什么是 __file__
属性?创建自定义文档化的库 自定义包示例
在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__
属性:提供当前模块的文件路径,有助于调试和理解模块的位置。