DAY 28 类的定义和方法

知识点学习

1. 类的定义

在Python中,类是创建对象的模板。使用class关键字来定义一个类。类名通常采用首字母大写的命名方式(PascalCase)。

# 最简单的类定义
class MyClass:pass  # 使用pass占位符

类的定义就像是创建一个蓝图,比如要造汽车,类就是汽车的设计图纸,而具体的汽车对象就是根据这个图纸制造出来的实体车辆。

2. pass占位语句

pass是Python中的占位语句,当需要在语法上需要代码块,但暂时不想写具体内容时使用。它什么都不做,只是为了保证语法正确。

class EmptyClass:pass  # 暂时没有具体内容,但语法完整def empty_function():pass  # 函数体暂时为空if True:pass  # 条件语句暂时为空

3. 类的初始化方法

__init__方法是类的构造方法,当创建类的实例时会自动调用。这就像是给新生儿起名字和登记基本信息的过程。

class Person:def __init__(self, name, age):"""初始化方法,创建Person对象时自动调用self: 代表类的实例本身name, age: 传入的参数"""self.name = name  # 实例属性self.age = age   # 实例属性print(f"创建了一个名叫{name}的人,年龄{age}岁")# 创建对象时,__init__方法自动执行
person1 = Person("小明", 18)  # 输出:创建了一个名叫小明的人,年龄18岁
person2 = Person("小红", 20)  # 输出:创建了一个名叫小红的人,年龄20岁

4. 类的普通方法

普通方法是定义在类中的函数,用来实现类的功能。每个方法的第一个参数必须是self,代表调用该方法的实例。

class Student:def __init__(self, name, score):self.name = nameself.score = scoredef introduce(self):"""自我介绍方法"""return f"我是{self.name},我的成绩是{self.score}分"def is_pass(self):"""判断是否及格"""return self.score >= 60def add_score(self, points):"""加分方法"""self.score += pointsprint(f"{self.name}加了{points}分,现在总分是{self.score}")# 使用示例
student = Student("李华", 75)
print(student.introduce())  # 我是李华,我的成绩是75分
print(student.is_pass())    # True
student.add_score(10)       # 李华加了10分,现在总分是85

5. 类的继承

继承是面向对象编程的重要特性,子类可以继承父类的属性和方法。这就像是孩子会遗传父母的某些特征一样。

属性的继承
class Animal:def __init__(self, name, species):self.name = nameself.species = speciesself.is_alive = True  # 所有动物都是活着的class Dog(Animal):  # Dog继承Animaldef __init__(self, name, breed):super().__init__(name, "犬类")  # 调用父类的__init__方法self.breed = breed  # 子类特有的属性# 创建对象
dog = Dog("旺财", "金毛")
print(f"名字:{dog.name}")      # 继承自父类的属性
print(f"种类:{dog.species}")   # 继承自父类的属性
print(f"品种:{dog.breed}")     # 子类特有的属性
print(f"是否存活:{dog.is_alive}")  # 继承自父类的属性
方法的继承
class Animal:def __init__(self, name):self.name = namedef eat(self):return f"{self.name}正在吃东西"def sleep(self):return f"{self.name}正在睡觉"class Cat(Animal):def __init__(self, name, color):super().__init__(name)self.color = colordef meow(self):  # 子类特有的方法return f"{self.name}在喵喵叫"def eat(self):  # 方法重写return f"{self.name}优雅地吃着猫粮"# 使用示例
cat = Cat("咪咪", "白色")
print(cat.eat())    # 调用重写后的方法:咪咪优雅地吃着猫粮
print(cat.sleep())  # 调用继承的方法:咪咪正在睡觉
print(cat.meow())   # 调用子类特有方法:咪咪在喵喵叫

作业

题目1:定义圆(Circle)类

思路分析:
需要创建一个圆类,它应该能够存储半径信息,并且能够计算面积和周长。圆的面积公式是πr²,周长公式是2πr。

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}")                    # 输出:半径:5
print(f"面积:{circle.calculate_area()}")          # 输出:面积:78.54
print(f"周长:{circle.calculate_circumference()}")  # 输出:周长:31.42# 测试默认值
default_circle = Circle()
print(f"默认圆的半径:{default_circle.radius}")     # 输出:默认圆的半径:1
print(f"默认圆的面积:{default_circle.calculate_area()}")  # 输出:默认圆的面积:3.14

题目2:定义长方形(Rectangle)类

思路分析:
长方形类需要存储长和宽两个属性,能够计算面积(长×宽)和周长(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.widthrect = Rectangle(4, 6)
print(f"长:{rect.length}, 宽:{rect.width}")      # 输出:长:4, 宽:6
print(f"面积:{rect.calculate_area()}")           # 输出:面积:24
print(f"周长:{rect.calculate_perimeter()}")      # 输出:周长:20
print(f"是否为正方形:{rect.is_square()}")         # 输出:是否为正方形:Falsesquare = Rectangle(5, 5)
print(f"是否为正方形:{square.is_square()}")       # 输出:是否为正方形:True# 测试默认值
default_rect = Rectangle()
print(f"默认长方形:长={default_rect.length}, 宽={default_rect.width}")  # 输出:默认长方形:长=1, 宽=1
print(f"默认长方形是否为正方形:{default_rect.is_square()}")  # 输出:默认长方形是否为正方形:True

题目3:图形工厂

思路分析:
工厂函数是一种设计模式,根据不同的参数创建不同类型的对象。需要创建一个函数,根据传入的图形类型参数来决定创建圆还是长方形对象。

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}")shape1 = create_shape("circle", 5)
print(f"圆的周长:{shape1.calculate_circumference()}")  # 输出:圆的周长:31.42shape2 = create_shape("rectangle", 3, 4)
print(f"长方形是否为正方形:{shape2.is_square()}")      # 输出:长方形是否为正方形:False# 更多测试示例
print("\n=== 更多测试示例 ===")# 创建默认圆
default_circle = create_shape("circle")
print(f"默认圆的面积:{default_circle.calculate_area()}")# 创建正方形(只传入一个参数)
square_shape = create_shape("rectangle", 6)
print(f"正方形的面积:{square_shape.calculate_area()}")
print(f"是否为正方形:{square_shape.is_square()}")# 创建默认长方形
default_rect = create_shape("rectangle")
print(f"默认长方形的周长:{default_rect.calculate_perimeter()}")# 错误处理示例
try:error_shape = create_shape("triangle", 3, 4, 5)
except ValueError as e:print(f"错误:{e}")

完整示例代码

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}")# 综合测试
if __name__ == "__main__":print("=== DAY 28 类的定义和方法 测试 ===\n")# 测试圆类print("1. 圆类测试:")circle = Circle(5)print(f"半径:{circle.radius}")print(f"面积:{circle.calculate_area()}")print(f"周长:{circle.calculate_circumference()}")# 测试长方形类print("\n2. 长方形类测试:")rect = Rectangle(4, 6)print(f"长:{rect.length}, 宽:{rect.width}")print(f"面积:{rect.calculate_area()}")print(f"周长:{rect.calculate_perimeter()}")print(f"是否为正方形:{rect.is_square()}")square = Rectangle(5, 5)print(f"正方形是否为正方形:{square.is_square()}")# 测试图形工厂print("\n3. 图形工厂测试:")shape1 = create_shape("circle", 5)print(f"工厂创建的圆的周长:{shape1.calculate_circumference()}")shape2 = create_shape("rectangle", 3, 4)print(f"工厂创建的长方形是否为正方形:{shape2.is_square()}")

@浙大疏锦行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91394.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91394.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/91394.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSPF综合实验报告册

一、实验拓扑二、实验要求1、R4为ISP,其上只配置IP地址;R4与其他所直连设备间均使用公有IP; 2、R3-R5、R6、R7为MGRE环境,R3为中心站点; 3、整个OSPF环境IP基于172.16.0.0/16划分;除了R12有两个环回&#x…

网络层6——内部网关协议RIP、OSPF(重点)

目录 一、基本概念 1、理想的路由算法应具备的特点 2、分层次的路由选择协议 二、内部网关协议RIP 1、特点 2、路由交换信息 3、距离向量算法 4、坏消息传送慢问题 5、RIP报文格式 三、内部网关协议OSPF 1、特点 2、其他特点 3、自治系统区域划分 4、OSPF的5中分…

同品牌的系列广告要如何保证宣传的连贯性?

对于品牌的系列广告而言,内容的连贯性十分重要。如果系列广告之间缺乏内在联系,不仅会削弱品牌形象的统一性,还可能导致用户的认知混乱。保证宣传内容的连贯性不是让每则广告完全相同,而是在变化中保持核心要素的一致性。我们该如…

深度学习:激活函数Activaton Function

一、为什么需要激活函数?神经网络本质上是多个线性变换(矩阵乘法)叠加。如果没有激活函数,即使叠加多层,整体仍等价于一个线性函数:这样的网络无法学习和拟合现实世界中复杂的非线性关系。激活函数的作用&a…

deepseek: 切分类和长函数到同名文件中

import re import sys import os import ast from tokenize import generate_tokens, COMMENT, STRING, NL, INDENT, DEDENT import iodef extract_entities(filename):"""提取类和函数到单独文件"""with open(filename, r, encodingutf-8) as f…

新型融合肽递送外泌体修饰可注射温敏水凝胶用于骨再生

温敏水凝胶因能模拟细胞外基质微环境,且具有原位注射性和形态适应性,在骨组织工程中应用广泛。小肠黏膜下层(SIS)作为天然细胞外基质来源,富含 I 型和 III 型胶原蛋白及多种生物活性因子,其制备的水凝胶在组…

SPI接口的4种模式(根据时钟极性和时钟相位)

SPI(Serial Peripheral Interface) 接口根据时钟极性(CPOL)和时钟相位(CPHA)的不同组合,共有 4种工作模式。这些模式决定了数据采样和传输的时序关系,是SPI通信中必须正确配置的关键…

Java:高频面试知识分享2

HashSet 和 TreeSet 的区别?底层实现:HashSet 基于 HashMap 实现,使用哈希表存储元素;TreeSet 基于 TreeMap,底层为红黑树。元素顺序:HashSet 无序;TreeSet 会根据元素的自然顺序或传入的 Compa…

C语言习题讲解-第九讲- 常见错误分类等

C语言习题讲解-第九讲- 常见错误分类等1. C程序常见的错误分类不包含:( )2. 根据下面递归函数:调用函数 Fun(2) ,返回值是多少( )3. 关于递归的描述错误的是:( &#x…

A∗算法(A-star algorithm)一种在路径规划和图搜索中广泛使用的启发式搜索算法

A∗A*A∗算法(A-star algorithm)是一种在路径规划和图搜索中广泛使用的启发式搜索算法,它结合了Dijkstra算法的广度优先搜索思想和启发式算法的效率优势,能够高效地找到从起点到终点的最短路径。 1. 基本原理 A*算法的核心是通过估…

UniappDay06

1.填写订单-渲染基本信息 静态结构&#xff08;分包&#xff09;封装请求API import { http } from /utils/http import { OrderPreResult } from /types/orderexport const getmemberOrderPreAPI () > {return http<OrderPreResult>({method: GET,url: /member/orde…

论文略读:GINGER: Grounded Information Nugget-Based Generation of Responses

SIGIR 2025用户日益依赖对话助手&#xff08;如 ChatGPT&#xff09;来满足多种信息需求&#xff0c;这些需求包括开放式问题、需要推理的间接回答&#xff0c;以及答案分布在多个段落中的复杂查询RAG试图通过在生成过程中引入检索到的信息来解决这些问题但如何确保回应的透明性…

从内部保护你的网络

想象一下&#xff0c;你是一家高端俱乐部的老板&#xff0c;商务贵宾们聚集在这里分享信息、放松身心。然后假设你雇佣了最顶尖的安保人员——“保镖”——站在门口&#xff0c;确保你准确掌握所有进出的人员&#xff0c;并确保所有人的安全。不妨想象一下丹尼尔克雷格和杜安约…

Redis 中 ZipList 的级联更新问题

ZipList 的结构ZipList 是 Redis 中用于实现 ZSet 的压缩数据结构&#xff0c;其元素采用连续存储方式&#xff0c;具有很高的内存紧凑性。ZipList 结构组成如下&#xff1a;zlbytes&#xff1a;4字节&#xff0c;记录整个ziplist的字节数zltail&#xff1a;4字节&#xff0c;记…

【苍穹外卖项目】Day05

&#x1f4d8;博客主页&#xff1a;程序员葵安 &#x1faf6;感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb; 一、Redis入门 Redis简介 Redis是一个基于内存的 key-value 结构数据库 基于内存存储&#xff0c;读写性能高适合存储热点数据&#xff08;热…

语音识别dolphin 学习笔记

目录 Dolphin简介 Dolphin 中共有 4 个模型&#xff0c;其中 2 个现在可用。 使用demo Dolphin简介 Dolphin 是由 Dataocean AI 和清华大学合作开发的多语言、多任务语音识别模型。它支持东亚、南亚、东南亚和中东的 40 种东方语言&#xff0c;同时支持 22 种汉语方言。该模…

视频生成中如何选择GPU或NPU?

在视频生成中选择GPU还是NPU&#xff0c;核心是根据场景需求、技术约束和成本目标来匹配两者的特性。以下是具体的决策框架和场景化建议&#xff1a; 核心决策依据&#xff1a;先明确你的“视频生成需求” 选择前需回答3个关键问题&#xff1a; 生成目标&#xff1a;视频分辨率…

从豆瓣小组到深度洞察:一个基于Python的舆情分析爬虫实践

文章目录 从豆瓣小组到深度洞察:一个基于Python的舆情分析爬虫实践 摘要 1. 背景 2. 需求分析 3. 技术选型与实现 3.1 总体架构 3.2 核心代码解析 4. 难点分析与解决方案 5. 总结与展望 对爬虫、逆向感兴趣的同学可以查看文章,一对一小班教学:https://blog.csdn.net/weixin_…

RustDesk 使用教程

说明&#xff1a; 使用RustDesk 需要在不同的电脑安装对应系统型号的客户端&#xff0c;然后再去云服务器安装一个服务端即可。 1、到网站下载客户端&#xff1a;https://rustdesk.com/zh-cn/ 两台电脑安装客户端。 2、在云服务器安装服务端 1&#xff09;官网教程&#xff1a;…

【C语言网络编程基础】TCP 服务器详解

在网络通信中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种可靠、面向连接的协议。一个 TCP 服务器正是基于这种协议&#xff0c;为客户端提供稳定的网络服务。本文将详细介绍 TCP 服务器的基本原理和工作流程。 一、什…