news 2026/5/9 3:37:32

python学习2

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python学习2

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
    • 静态方法:不访问实例或类,用@staticmethod

28.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 导入模块

  • 讲解:使用importfrom ... 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 自带丰富模块,无需安装,如ossysmathdatetime
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(days=1) 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
    • 静态方法:不访问类或实例属性,用@staticmethod
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()
  • 关键点总结
    • 实例方法访问对象属性
    • 类方法访问类属性
    • 静态方法独立,常用于工具函数

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(f"Hello, {name}") greet("小明")
  • 关键点总结
    • @decorator等价于greet = decorator(greet)
    • 装饰器常用于日志、权限检查、性能统计
    • 可装饰函数或类方法
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 3:35:30

Godot 4地形插件Terrainy:程序化地形生成与优化实践

1. 项目概述&#xff1a;Terrainy&#xff0c;一个为Godot 4.x量身打造的地形生成插件 如果你正在用Godot引擎开发3D游戏&#xff0c;尤其是开放世界、沙盒或者任何需要自然景观的场景&#xff0c;那么“手动雕刻地形”这件事&#xff0c;大概率会成为你开发流程中的一个痛点。…

作者头像 李华
网站建设 2026/5/9 3:32:31

AI×DB引擎架构设计与关键技术解析

1. AIDB引擎架构设计原理AIDB引擎的核心思想是将机器学习能力深度集成到数据库内核中&#xff0c;形成统一的数据处理和分析平台。这种架构突破了传统数据库仅能处理结构化数据的限制&#xff0c;实现了从数据存储到智能分析的无缝衔接。1.1 共享抽象层设计现代AIDB系统通常采用…

作者头像 李华
网站建设 2026/5/9 3:28:26

ARM Trace Buffer扩展:内存访问与缓存一致性详解

1. ARM Trace Buffer扩展概述在ARM架构的调试子系统中&#xff0c;Trace Buffer&#xff08;跟踪缓冲区&#xff09;扮演着关键角色&#xff0c;它负责捕获和存储处理器执行过程中的指令流和数据访问信息。这种机制对于系统调试、性能分析和安全监控至关重要&#xff0c;特别是…

作者头像 李华
网站建设 2026/5/9 3:28:08

基于Markdown的多智能体协作框架:提升LLM编程效率的工程化实践

1. 项目概述&#xff1a;一个为现代LLM设计的Markdown原生多智能体框架如果你和我一样&#xff0c;每天都在和Cursor、Claude、GPT这些现代大语言模型打交道&#xff0c;那你肯定也遇到过这样的困境&#xff1a;想让AI帮你写个复杂功能&#xff0c;比如一个完整的用户认证模块&…

作者头像 李华
网站建设 2026/5/9 3:26:06

开源机械爪OpenClaw:从3D打印到力控的完整机器人抓取方案

1. 项目概述&#xff1a;一个开源的机械爪设计与控制方案如果你对机器人、自动化或者DIY机械臂感兴趣&#xff0c;那么“lucab85/openclaw”这个项目绝对值得你花时间深入研究。这是一个托管在GitHub上的开源机械爪项目&#xff0c;它不仅仅是一套3D打印文件&#xff0c;更是一…

作者头像 李华