当前位置: 首页 > 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.lryc.cn/news/607761.html

相关文章:

  • 设计模式篇:在前端,我们如何“重构”观察者、策略和装饰器模式
  • (LeetCode 面试经典 150 题) 138. 随机链表的复制 (哈希表)
  • PyTorch 中 Tensor 统计学函数及相关概念
  • linux编译基础知识-库文件标准路径
  • 3D,对比2D孰优孰劣?
  • SEA-RAFT:更简单、更高效、更准确的RAFT架构
  • 重生之我在暑假学习微服务第八天《OpenFeign篇》
  • 【C语言】内存函数与数据在内存中的存储
  • 推荐系统学习笔记(六)自监督学习
  • Kubernetes 构建高可用、高性能 Redis 集群实战指南
  • Ubuntu系统VScode实现opencv(c++)视频及摄像头使用
  • ffmpeg命令和ffplay命令详解
  • 垃圾收集器ParNewCMS与底层三色标记算法详解
  • 【云计算】云主机的亲和性策略(四):云主机组
  • VAST视频广告技术实现:从零开始搭建视频广告投放系统
  • 【20min 急速入门】使用Demucs进行音轨分离
  • 【云计算】云主机的亲和性策略(三):云主机 宿主机
  • 【Android】RecyclerView实现新闻列表布局(1)适配器使用相关问题
  • MySQL 运算符
  • 【Android】使用 Intent 传递对象的两种序列化方式
  • 【Android】进度条ProgressBar 可拖拽进度条Seekbar
  • Javaweb————Apache Tomcat服务器介绍及Windows,Linux,MAC三种系统搭建Apache Tomcat
  • Vue 详情模块 4
  • 分布式微服务--Nacos作为配置中心(二)
  • Text2SQL:如何通过自然语言直接获取数据,打破技术壁垒?
  • opencv自定义滤波
  • 入门MicroPython+ESP32:开启科技新旅程
  • 云原生三剑客:Kubernetes + Docker + Spring Cloud 实战指南与深度整合
  • Diffusion模型生产化指南:用LoRA技术快速定制企业专属AI画师
  • 电商API接口的优势、数据采集方法及功能说明