当前位置: 首页 > news >正文

Day 29: 复习

Day 28复习:Python类的定义和方法

📚 复习总结

1. 类的定义 - 核心概念回顾

🔑 关键点:

  • 类是创建对象的模板/蓝图
  • 使用 class 关键字定义
  • 类名采用 PascalCase 命名方式(首字母大写)
# 基础语法
class MyClass:pass  # 占位符,保证语法完整

💡 理解要点:
类就像是工厂的生产模具,对象就是根据模具生产出的具体产品。一个类可以创建无数个对象实例。

2. __init__ 初始化方法 - 构造函数

🔑 关键点:

  • 创建对象时自动调用
  • 第一个参数必须是 self
  • 用于设置对象的初始状态
class Person:def __init__(self, name, age):self.name = name    # 实例属性self.age = age      # 实例属性print(f"创建了{name},年龄{age}岁")# 创建对象时自动执行__init__
person = Person("小明", 18)

⚠️ 注意事项:

  • self 代表当前实例,不需要手动传递
  • 实例属性通过 self.属性名 定义
  • 可以在 __init__ 中进行参数验证和初始化操作

3. 类的普通方法 - 实例行为

🔑 关键点:

  • 第一个参数必须是 self
  • 通过对象调用:对象.方法名()
  • 可以访问和修改实例属性
class Student:def __init__(self, name, score):self.name = nameself.score = scoredef introduce(self):return f"我是{self.name},成绩{self.score}分"def add_score(self, points):self.score += pointsreturn self.score

4. 类的继承 - 代码复用机制

🔑 关键点:

  • 子类继承父类的所有属性和方法
  • 使用 super() 调用父类方法
  • 可以重写(override)父类方法
class Animal:def __init__(self, name):self.name = namedef eat(self):return f"{self.name}在吃东西"class Dog(Animal):  # 继承Animaldef __init__(self, name, breed):super().__init__(name)  # 调用父类__init__self.breed = breeddef eat(self):  # 方法重写return f"{self.name}正在吃狗粮"

📝 继承的优势:

  • 代码复用,减少重复
  • 建立类之间的层次关系
  • 支持多态性

🏆 作业复习与解析

题目1:圆类设计 - 基础类实现

复习重点:

  • 数学公式的应用:面积 = πr²,周长 = 2πr
  • math 模块的使用
  • 方法返回值的处理
import mathclass Circle:def __init__(self, radius=1):self.radius = radiusdef calculate_area(self):area = math.pi * self.radius ** 2return round(area, 2)  # 保留两位小数def calculate_circumference(self):circumference = 2 * math.pi * self.radiusreturn round(circumference, 2)# 测试
circle = Circle(5)
print(f"半径:{circle.radius}")
print(f"面积:{circle.calculate_area()}")
print(f"周长:{circle.calculate_circumference()}")

🎯 学习要点:

  • 默认参数的使用 (radius=1)
  • 数值精度控制 (round() 函数)
  • 类方法的命名规范

题目2:长方形类设计 - 条件判断应用

复习重点:

  • 多个属性的管理
  • 布尔方法的实现
  • 特殊情况的处理(正方形判断)
class Rectangle:def __init__(self, length=1, width=1):self.length = lengthself.width = widthdef calculate_area(self):return self.length * self.widthdef calculate_perimeter(self):return 2 * (self.length + self.width)def is_square(self):return self.length == self.width  # 布尔返回值# 测试正方形判断
rect = Rectangle(4, 6)
square = Rectangle(5, 5)
print(f"长方形是正方形:{rect.is_square()}")    # False
print(f"正方形是正方形:{square.is_square()}")   # True

🎯 学习要点:

  • 多参数构造函数
  • 布尔方法的设计原则
  • 边界条件的考虑

题目3:工厂模式 - 设计模式应用

复习重点:

  • 工厂函数的设计思想
  • 可变参数 *args 的应用
  • 异常处理机制
def create_shape(shape_type, *args):"""图形工厂函数shape_type: "circle" 或 "rectangle"*args: 可变参数,根据图形类型传入不同数量的参数"""if shape_type == "circle":if len(args) == 0:return Circle()  # 默认半径else:return Circle(args[0])elif shape_type == "rectangle":if len(args) == 0:return Rectangle()  # 默认长宽elif len(args) == 1:return Rectangle(args[0], args[0])  # 正方形else:return Rectangle(args[0], args[1])  # 长方形else:raise ValueError(f"不支持的图形类型:{shape_type}")# 多种创建方式测试
shape1 = create_shape("circle", 5)           # 指定半径的圆
shape2 = create_shape("rectangle", 3, 4)     # 长方形
shape3 = create_shape("rectangle", 6)        # 正方形
default_circle = create_shape("circle")      # 默认圆

🎯 学习要点:

  • 工厂模式的实际应用
  • 可变参数的灵活处理
  • 错误处理的重要性

📋 完整复习代码

import math# 圆类
class Circle:def __init__(self, radius=1):self.radius = radiusdef calculate_area(self):area = math.pi * self.radius ** 2return round(area, 2)def calculate_circumference(self):circumference = 2 * math.pi * self.radiusreturn round(circumference, 2)# 长方形类
class Rectangle:def __init__(self, length=1, width=1):self.length = lengthself.width = widthdef calculate_area(self):return self.length * self.widthdef calculate_perimeter(self):return 2 * (self.length + self.width)def is_square(self):return self.length == self.width# 工厂函数
def create_shape(shape_type, *args):if shape_type == "circle":if len(args) == 0:return Circle()else:return Circle(args[0])elif shape_type == "rectangle":if len(args) == 0:return Rectangle()elif len(args) == 1:return Rectangle(args[0], args[0])else:return Rectangle(args[0], args[1])else:raise ValueError(f"不支持的图形类型:{shape_type}")# 综合测试函数
def comprehensive_test():print("=== Python类定义和方法 - 复习测试 ===\n")# 1. 基础类测试print("📐 1. 圆类功能测试:")circle = Circle(5)print(f"   半径:{circle.radius}")print(f"   面积:{circle.calculate_area()}")print(f"   周长:{circle.calculate_circumference()}")# 2. 继承相关测试print("\n📏 2. 长方形类功能测试:")rect = Rectangle(4, 6)square = Rectangle(5, 5)print(f"   长方形 - 长:{rect.length}, 宽:{rect.width}")print(f"   长方形面积:{rect.calculate_area()}")print(f"   长方形周长:{rect.calculate_perimeter()}")print(f"   是否为正方形:{rect.is_square()}")print(f"   正方形是否为正方形:{square.is_square()}")# 3. 工厂模式测试print("\n🏭 3. 工厂模式功能测试:")shapes = [create_shape("circle", 3),create_shape("rectangle", 4, 5),create_shape("rectangle", 6),  # 正方形create_shape("circle")  # 默认圆]for i, shape in enumerate(shapes, 1):if isinstance(shape, Circle):print(f"   图形{i}: 圆,半径={shape.radius}, 面积={shape.calculate_area()}")elif isinstance(shape, Rectangle):print(f"   图形{i}: 长方形,长={shape.length}, 宽={shape.width}, 是否正方形={shape.is_square()}")if __name__ == "__main__":comprehensive_test()

@浙大疏锦行

http://www.dtcms.com/a/311115.html

相关文章:

  • 音视频学习(四十五):声音的产生
  • 数据集-目标检测系列- 地球仪 数据集 globe>> DataBall
  • 前端应用权限设计面面观
  • 网络基础实操篇-05-路由基础-最佳实践
  • 【机器学习】非线性分类算法(上):KNN(基于距离相似度)与朴素(特征独立)贝叶斯(基于概率统计)
  • MybatisPlus-逻辑删除
  • 【ElementPlus】深入探索ElementPlus:前端界面的全能组件库
  • 【Conda】配置Conda镜像源
  • 【Linux】vim—基操
  • 网易云音乐硬刚腾讯系!起诉SM娱乐滥用市场支配地位
  • 【深度学习②】| DNN篇
  • SmartCLIP:具有识别保证的模块化视觉-语言对齐
  • 基于OAuth2与JWT的微服务API安全实战经验分享
  • Java 垃圾回收机制:自动化内存管理的艺术与科学
  • Python 程序设计讲义(54):Python 的函数——函数概述
  • Linux iptables防火墙操作
  • 一种基于入侵杂草优化算法(IWO)的聚类算法,并与K-Means、高斯混合模型(GMM)进行对比,Matlab
  • 网安-中间件(updating..)
  • HarmonyOS NEXT系列之定制化构建制品
  • HarmonyOS 开发:基于 ArkUI 实现复杂表单验证的最佳实践
  • 电子电气架构 --- 汽车网络安全概述
  • lumerical——布拉格光栅(2)
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现道路车辆事故的检测识别(C#代码UI界面版)
  • LLM隐藏层状态: outputs.hidden_states 是 MLP Residual 还是 Layer Norm
  • 【前端:Html】--1.1.基础语法
  • 在 Elasticsearch 中落地 Learning to Rank(LTR)
  • 修改git commit 提交版本的描述信息
  • 【算法笔记 day four】二分查找
  • realIADD3复现笔记
  • 记录一次ESP32报错Guru Meditation Error: Core 1 panic‘ed (Double exception).