目录
3.1 模块的引入
模块是包含Python代码的.py
文件,通过import
语句加载:
import math # 导入标准库
from random import randint # 导入特定功能
import numpy as np # 使用别名
print(math.sqrt(16)) # 4.0
print(randint(1,10)) # 随机整数
模块搜索路径(优先级从高到低):
-
当前目录
-
PYTHONPATH环境变量路径
-
Python安装目录
3.2 自定义模块开发
创建graphics.py
文件:
"""图形处理模块"""
_VERSION = 1.0
def render(image):
"""图像渲染函数"""
pass
class Canvas:
"""画布类"""
def __init__(self, size):
self.size = size
使用自定义模块:
import graphics
canvas = graphics.Canvas((800,600))
特殊变量:
-
__name__
:模块被直接运行时值为"__main__"
-
__file__
:显示模块文件路径
3.3 对象与方法
面向对象三要素:
python
class Color:
def __init__(self, r, g, b): # 构造方法
self.r = r
self.g = g
self.b = b
def hex_code(self): # 实例方法
return f"#{self.r:02x}{self.g:02x}{self.b:02x}"
red = Color(255, 0, 0)
print(red.hex_code()) # #ff0000
概念 | 描述 | 示例 |
---|---|---|
类 | 对象的蓝图 | class Color |
实例 | 类的具体实现 | red = Color() |
方法 | 类中定义的函数 | hex_code() |
属性 | 对象存储的数据 | self.r |
3.4 像素与颜色处理
RGB颜色模型:
class Color:
def __init__(self, r, g, b): # 构造方法
self.r = r
self.g = g
self.b = b
def hex_code(self): # 实例方法
return f"#{self.r:02x}{self.g:02x}{self.b:02x}"
red = Color(255, 0, 0)
print(red.hex_code()) # #ff0000
颜色表示方式:
-
RGB元组:(255, 0, 0)
-
十六进制:#FF0000
-
HSL格式:(0°, 100%, 50%)
3.5 模块测试
单元测试示例:
import unittest
class TestColor(unittest.TestCase):
def setUp(self):
self.red = Color(255, 0, 0)
def test_hex(self):
self.assertEqual(self.red.hex_code(), "#ff0000")
def test_invalid(self):
with self.assertRaises(ValueError):
Color(300, 0, 0) # RGB值超出范围
if __name__ == "__main__":
unittest.main()
测试覆盖率:
-
边界值测试
-
异常情况测试
-
性能压力测试
3.6 模块开发规范
PEP8模块规范:
-
导入顺序(间隔空行):
# 标准库 import os import sys # 第三方库 import numpy as np # 本地模块 from . import utils
-
避免循环导入
-
模块文档字符串
-
使用类型提示:
def blend_colors(c1: Color, c2: Color, ratio: float) -> Color: pass
3.7 本章小结
开发原则:
-
模块化:将功能拆分为独立模块
-
封装性:隐藏对象内部实现细节
-
可测试性:模块应具备可测试性
-
风格统一:遵循PEP8规范
典型应用场景:
-
将图像处理功能封装为
image_processor
模块 -
使用类管理游戏角色属性和行为
-
通过单元测试保证颜色转换准确性
(提示:复杂项目建议使用pytest
框架,大型模块使用__init__.py
组织包结构,重要模块应编写API文档)