28. 面向对象基础28.1 类和对象讲解Python 是面向对象语言类是对象的模板对象是类的实例。# 定义类 class Student: def __init__(self, name, age): self.name name self.age age def show(self): print(f姓名{self.name}, 年龄{self.age}) # 创建对象 stu1 Student(小明, 18) stu1.show()关键点总结class定义类__init__构造方法用于初始化属性self表示对象本身对象通过类创建调用方法使用对象.方法()28.2 类属性与实例属性讲解类属性是所有实例共享的实例属性属于各自对象。class Dog: kind 狗 # 类属性 def __init__(self, name): self.name name # 实例属性 dog1 Dog(旺财) dog2 Dog(小黑) print(dog1.kind, dog1.name) print(dog2.kind, dog2.name) # 修改类属性 Dog.kind 宠物狗 print(dog1.kind, dog2.kind)关键点总结类属性用类名访问或实例访问实例属性只能通过对象访问修改类属性会影响所有实例28.3 方法类型讲解Python 类中方法有三种实例方法、类方法、静态方法class Demo: count 0 # 类属性 def __init__(self, name): self.name name def instance_method(self): print(f实例方法{self.name}) classmethod def class_method(cls): print(f类方法{cls.count}) staticmethod def static_method(): print(静态方法不访问类或实例属性) d Demo(测试) d.instance_method() Demo.class_method() Demo.static_method()关键点总结实例方法访问对象属性类方法访问类属性用classmethod静态方法不访问实例或类用staticmethod28.4 继承与多态讲解子类继承父类属性和方法可重写方法实现多态class Animal: def speak(self): print(动物叫声) class Dog(Animal): def speak(self): print(汪汪汪) class Cat(Animal): def speak(self): print(喵喵喵) animals [Dog(), Cat()] for a in animals: a.speak() # 多态同名方法不同表现关键点总结子类通过(父类)继承方法重写实现多态Python 支持多继承28.5 封装与私有属性讲解通过_或__前缀实现属性和方法封装class Person: def __init__(self, name, age): self.__name name # 私有属性 self._age age # 受保护属性 def show(self): print(f姓名{self.__name}, 年龄{self._age}) p Person(小红, 20) p.show() # print(p.__name) # 报错私有属性不能直接访问 print(p._age) # 可以访问但约定不直接使用关键点总结_变量受保护不建议外部访问__变量私有属性外部不能直接访问封装保证对象内部数据安全29. 模块与包29.1 模块概念讲解模块是 Python 的文件里面可以包含函数、类、变量。通过模块可以实现代码复用和组织。# 假设有一个模块 math_utils.py def add(a, b): return a b def sub(a, b): return a - b关键点总结每个.py文件都是模块模块名即文件名不含.py可以在其他文件中import使用模块功能29.2 导入模块讲解使用import或from ... import ...导入模块。# 导入整个模块 import math_utils print(math_utils.add(10, 5)) print(math_utils.sub(10, 5)) # 从模块导入指定函数 from math_utils import add print(add(20, 10)) # 导入时重命名 import math_utils as mu print(mu.add(1, 2))关键点总结import 模块名导入整个模块from 模块名 import 函数名导入指定功能as可给模块或函数起别名29.3 包的概念讲解包是包含多个模块的目录目录下需有__init__.py文件。project/ ├── mypackage/ │ ├── __init__.py │ ├── mod1.py │ └── mod2.py └── main.py关键点总结包 目录 __init__.py可以组织大量模块__init__.py可为空也可执行包初始化代码29.4 导入包中的模块讲解使用点号.导入包内模块# main.py from mypackage import mod1 mod1.func1() # 或者 from mypackage.mod2 import func2 func2()关键点总结包名.模块名导入模块from 包名.模块名 import 函数/类导入指定内容避免循环导入29.5 Python 标准库讲解Python 自带丰富模块无需安装如os、sys、math、datetime等import os print(os.getcwd()) # 当前工作目录 import sys print(sys.version) # Python 版本 import math print(math.sqrt(16)) # 开平方 from datetime import datetime print(datetime.now())关键点总结标准库模块无需安装可快速处理文件、系统、数学、时间等功能避免重复造轮子提高开发效率29.6 自定义模块建议讲解模块命名尽量简洁功能单一便于维护提供文档字符串方便其他人使用 math_utils 模块示例 提供加减乘除基本运算函数 def add(a, b): return a b关键点总结保持模块高内聚、低耦合使用文档字符串记录功能模块放在项目统一路径或 Python 搜索路径中30. Python 标准库常用模块30.1 os 模块讲解os模块用于操作系统相关功能如文件路径、目录管理等。import os # 当前工作目录 print(os.getcwd()) # 列出当前目录文件和文件夹 print(os.listdir(.)) # 创建文件夹 os.mkdir(test_dir) # 重命名文件夹 os.rename(test_dir, demo_dir) # 删除文件夹 os.rmdir(demo_dir)关键点总结os.getcwd()获取当前目录os.listdir()列出目录内容os.mkdir()/os.rmdir()创建/删除文件夹os.rename()重命名文件或文件夹30.2 sys 模块讲解sys模块提供与 Python 解释器交互的功能。import sys # Python 版本 print(sys.version) # 命令行参数 print(sys.argv) # 退出程序 # sys.exit()关键点总结sys.version查看 Python 版本sys.argv获取命令行参数列表sys.exit()退出程序30.3 math 模块讲解math提供常用数学函数如开方、三角函数、对数等。import math print(math.sqrt(16)) # 4.0 print(math.pow(2, 3)) # 8.0 print(math.sin(math.pi/2)) # 1.0 print(math.ceil(3.2)) # 4 向上取整 print(math.floor(3.8)) # 3 向下取整关键点总结常用函数sqrt,pow,sin,cos,ceil,floor适合科学计算和数学操作30.4 datetime 模块讲解datetime模块处理日期和时间。from datetime import datetime, date, timedelta # 当前时间 now datetime.now() print(now) # 当前日期 today date.today() print(today) # 日期运算 tomorrow today timedelta(days1) print(tomorrow)关键点总结datetime.now()获取当前时间date.today()获取当前日期timedelta做日期加减运算30.5 random 模块讲解random用于生成随机数和随机选择。import random print(random.random()) # 0-1 随机浮点数 print(random.randint(1, 10)) # 1-10 随机整数 print(random.choice([1,2,3,4,5])) # 随机选择列表元素 print(random.sample([1,2,3,4,5], 3)) # 随机取 3 个元素关键点总结random()生成 0-1 浮点数randint(a, b)生成 a-b 整数choice从序列随机选一个sample从序列随机选多个30.6 collections 模块讲解collections提供高效容器类型如Counter,deque,defaultdict等。from collections import Counter, deque, defaultdict # Counter 计数器 words [apple, banana, apple, orange] cnt Counter(words) print(cnt) # deque 双端队列 dq deque([1,2,3]) dq.append(4) dq.appendleft(0) print(dq) # defaultdict dd defaultdict(int) dd[a] 1 print(dd)关键点总结Counter统计元素出现次数deque双端队列支持两端快速操作defaultdict自动初始化字典值31. 面向对象进阶31.1 类方法与静态方法复习讲解实例方法访问实例属性类方法访问类属性或方法用classmethod静态方法不访问类或实例属性用staticmethodclass Demo: count 0 # 类属性 def __init__(self, name): self.name name def instance_method(self): print(f实例方法: {self.name}) classmethod def class_method(cls): print(f类方法: {cls.count}) staticmethod def static_method(): print(静态方法: 无需访问实例或类) d Demo(测试) d.instance_method() Demo.class_method() Demo.static_method()关键点总结实例方法访问对象属性类方法访问类属性静态方法独立常用于工具函数31.2 属性装饰器property讲解property用于将方法变为属性访问便于封装和控制。class Person: def __init__(self, name): self._name name property def name(self): print(访问属性) return self._name name.setter def name(self, value): print(设置属性) self._name value p Person(小明) print(p.name) # 访问属性调用 getter p.name 小红 # 调用 setter print(p.name)关键点总结property将方法伪装为属性setter设置属性值封装数据控制访问和修改逻辑31.3 生成器yield讲解生成器可以按需生成数据节省内存适合大数据处理。# 普通函数返回列表 def func_list(n): return [i for i in range(n)] print(func_list(5)) # 生成器函数 def func_gen(n): for i in range(n): yield i for x in func_gen(5): print(x)关键点总结yield每次返回一个值保留函数状态for循环或next()遍历生成器内存效率高适合处理大数据31.4 迭代器讲解迭代器对象遵循__iter__和__next__协议可以被for循环遍历。# 自定义迭代器 class MyIterator: def __init__(self, n): self.i 0 self.n n def __iter__(self): return self def __next__(self): if self.i self.n: val self.i self.i 1 return val else: raise StopIteration it MyIterator(5) for x in it: print(x)关键点总结__iter__()返回迭代器对象__next__()返回下一个元素结束时抛出StopIteration生成器是迭代器的一种简化写法31.5 装饰器讲解装饰器用于在不修改函数代码的情况下增加功能。def decorator(func): def wrapper(*args, **kwargs): print(开始执行函数) result func(*args, **kwargs) print(函数执行结束) return result return wrapper decorator def greet(name): print(fHello, {name}) greet(小明)关键点总结decorator等价于greet decorator(greet)装饰器常用于日志、权限检查、性能统计可装饰函数或类方法