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

Day28 Python打卡训练营

知识点回顾:

1.  类的定义

2.  pass占位语句

3.  类的初始化方法

4.  类的普通方法

5.  类的继承:属性的继承、方法的继承

作业

题目1:定义圆(Circle)类

要求:

1.  包含属性:半径 radius。

2.  包含方法:

● calculate_area():计算圆的面积(公式:πr²)。

● calculate_circumference():计算圆的周长(公式:2πr)。

3.  初始化时需传入半径,默认值为 1。

# 示例运行
circle = Circle(5)
print(f"半径:{circle.radius}")       # 输出:半径:5
print(f"面积:{circle.calculate_area()}")   # 输出:面积:78.54(保留两位小数)
print(f"周长:{circle.calculate_circumference()}") # 输出:周长:31.42(保留两位小数)

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

1.  包含属性:长 length、宽 width。

2.  包含方法:

● calculate_area():计算面积(公式:长×宽)。

● calculate_perimeter():计算周长(公式:2×(长+宽))。 is_square() 方法,判断是否为正方形(长 == 宽)。

3.  初始化时需传入长和宽,默认值均为 1。

rect = 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

题目3:图形工厂

创建一个工厂函数 create_shape(shape_type, *args),根据类型创建不同图形对象:图形工厂(函数或类)

shape_type="circle":创建圆(参数:半径)。

shape_type="rectangle":创建长方形(参数:长、宽)。

shape1 = create_shape("circle", 5)
print(shape1.calculate_circumference())  # 输出:31.42shape2 = create_shape("rectangle", 3, 4)
print(shape2.is_square())                # 输出:False

Pass占位符和缩进

class ClassName: # 类名通常遵循大驼峰命名法 (UpperCamelCase),即每个单词的首字母都大写,class是定义类的关键词# 类的代码块 (可以包含属性定义、方法定义等)pass # pass 是一个占位符,表示这里暂时没有任何内容
class ClassName: # 类名通常遵循大驼峰命名法 (UpperCamelCase),即每个单词的首字母都大写,# # 类的代码块 (可以包含属性定义、方法定义等)# pass # pass 是一个占位符,表示这里暂时没有任何内容
 Cell In[4], line 3# pass # pass 是一个占位符,表示这里暂时没有任何内容^
SyntaxError: unexpected EOF while parsing

许多时候,当规划好准备写一个函数、或者一个类,关键词定义后,会先用pass占位,避免运行错误,等到想好写什么再去补上

比如def、class这些定义的关键词后,必须有一个有占据缩进位置的代码块。

还有下面这些依赖缩进的语句,都可以用pass语句来占位

# 条件语句
x = 10
if x > 5:pass# 如果这里是空的,就会报错,可以注释试一下,即使x=1也会报错
else:print("x is not greater than 5")
# 循环语句
for i in range(3):pass # 循环体是空的
try:# 尝试执行的代码print("hh")
except SomeError:pass# 捕获到异常后,这里需要代码
finally:pass# 无论如何都会执行的代码块,也需要内容

总结: Python 通过缩进来定义代码块的结构。当解释器遇到像 def, class, if, for 这样的语句,并且后面跟着冒号 : 时,它就期望接下来会有一个或多个缩进的语句来构成这个代码块。如果它没有找到任何缩进的语句(即代码块是空的),它就无法确定这个结构的范围,因此会抛出 IndentationError。

pass 语句的存在就是为了解决这个问题:它本身不执行任何操作,但它是一个有效的 Python 语句。所以,当你需要一个语法上存在的代码块,但又暂时不想在其中放入任何实际的逻辑时,pass 就是一个完美的占位符,它告诉解释器:“这里有一个代码块,但它什么也不做。”

类的初始化方法

初始化方法又叫构造方法、特殊方法

类有2种方法

  1. 初始化方法,
  2. 普通放大
    class Teacher: # 这里不需要括号def __init__(self): #初始化方法,这里没有传入参数self.name = "Susan" # 给类定义一些属性self.subject = "English"self.age = 33Teacher = Teacher() # 创建一个Teacher类的实例
    print(Teacher.name) # 输出: Susan
    Susan
    class Teacher:def __init__(self, name, age):# 初始化方法,传入了参数self.name = name # 外界的参数,需要通过self.xxx来复制给类自己的属性self.age = ageself.subject = "English"  # 这个属性仍然是在创建时就设定好的# 创建一个Teacher对象的例子,构造方法的参数必须
    teacher = Teacher("Susan", 33) # 如果在初始化方法中设置了非默认的参数,那么外界就必须要传入才行
    print(teacher.name)  # 输出: Susan
    print(teacher.age)   # 输出: 33
    print(teacher.subject)  # 输出: English

    其中,self.xx是用来表明这个属性“归属于”这个类自己的(self)。比如self.name,就代表着:“自己的名字”,self等于“自己”,这个self指向类的实例化地址,传入的self.xx是它的属性。 以后要是用它的属性值,即使是从外界参数传入的,前面也必须加上self.xx,否则传入的参数没价值(例外的情况我们不提)

    类的普通方法

    除了init方法(初始化方法,又名构造方法),还包含一些普通方法(自己定义)

    普通方法和init方法的差别在于,init方法是类的构造方法,当创建对象时,会自动调用init方法----只要你创建这个类对象了,这个init函数就会执行

    普通方法是只有你调用类的这个方法的时候,函数才会执行

    class Teacher:def __init__(self):self.name = "Susan"self.subject = "English"self.age = 33def teach_lesson(self):print("上课中")def criticize(self):print("批评人") 
    t = Teacher()
    t.teach_lesson() # 调用类的方法
    t.criticize()
    print(t.name)
    上课中
    批评人
    Susan
    class Teacher:# 初始化方法接受参数以动态设置教师的属性def __init__(self, name, subject, age):self.name = nameself.subject = subjectself.age = age# 不是init的都叫做普通方法# 普通方法,模拟教师上课的行为def teach_lesson(self):print(f"{self.name}正在教{self.subject}。")# 另一个普通方法,模拟教师批评学生的行为def criticize(self, student_name):print(f"{self.name}正在批评{student_name}。")# 创建Teacher类的实例
    teacher = Teacher("Susan", "English", 33)# 调用教师的方法
    teacher.teach_lesson()
    teacher.criticize("John")#普通方法的参可以等到调用该方法的时候再传
    Susan正在教English。
    Susan正在批评John。
    

    类的继承

    类已经是比较优秀的封装了,封装了函数、封装了属性

    正如装饰器进一步封装了函数的可复用的功能,装饰器函数封装了函数

    那么有没有东西可以进一步封装类呢?这就引出了类的继承

    在面向对象编程中,继承允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码复用和功能扩展。子类可以:

  3. 复用父类的代码(无需重新实现)。

  4. 重写父类的方法(修改或增强功能)。

  5. 仔细观察下方实例代码的注释,写的非常详细

  6. 添加新的方法和属性(扩展功能)。

    # 先沿用之前定义的teacher类
    class Teacher:def __init__(self, name, subject, age):self.name = nameself.subject = subjectself.age = agedef teach_lesson(self):print(f"{self.name}正在教{self.subject}。")def criticize(self, student_name):print(f"{self.name}正在批评{student_name}。")# 继承 Teacher 类,起名特级教师
    class MasterTeacher(Teacher): # 1. 继承需要在括号中指定父类def __init__(self, name, subject, age, experience_years):# 2. 继承的时候需要调用父类的构造方法,所以需要传入父类的参数,同时也可以传入自己的参数# 调用父类的构造方法初始化基本属性super().__init__(name, subject, age) # 3. 调用父类的构造方法,这里的super()是一个内置函数,返回父类的实例# 4. 此时子类自动拥有了父类的属性和方法# 添加子类特有的属性self.experience_years = experience_years # 5. 子类特有的属性可以在这里定义# 重写父类方法,增强功能-----如果子类定义了与父类同名的方法,子类实例会优先调用子类的方法。def teach_lesson(self): # 6. 重写父类的方法print(f"{self.name}(特级教师)正在用高级方法教授{self.subject}。")# 新增子类特有的方法def give_lecture(self, topic): print(f"{self.name}正在举办关于{topic}的讲座。")# 创建子类实例
    master = MasterTeacher("王教授", "数学", 45, 20)# 调用继承的方法
    master.teach_lesson()     # 调用重写的父类的方法
    master.criticize("李同学")  # 调用父类的方法,如果不修改方法,则可以直接继承父类的方法# 调用子类特有的方法
    master.give_lecture("微积分")  # 调用子类新增的方法
    王教授(特级教师)正在用高级方法教授数学。
    王教授正在批评李同学。
    王教授正在举办关于微积分的讲座。
    # super()函数 除了在构造方法中使用,还可以在其他方法中使用# 定义一个父类
    class Animal:def __init__(self, name, age):self.name = nameself.age = agedef speak(self):print(f"{self.name} 发出声音")class Dog(Animal):def speak(self):super().speak()  # 先调用父类的方法print("汪汪叫")    # 再添加子类的行为dog = Dog("旺财", 3)
    dog.speak() 
    旺财 发出声音
    汪汪叫
    

    所以重写父类的方法,也包含2种

  7. 直接重写:本质是会优先用子类的同名方法,完全替代父类方法,父类逻辑不会执行。
  8. 使用super()重写,保留父类方法的核心逻辑,并在其基础上扩展。
  9. @浙大疏锦行

相关文章:

Day28 Python打卡训练营

知识点回顾: 1. 类的定义 2. pass占位语句 3. 类的初始化方法 4. 类的普通方法 5. 类的继承:属性的继承、方法的继承 作业 题目1:定义圆(Circle)类 要求: 1. 包含属性:半径 radius。 2. …...

【OpenCV】基本数据类型及常见图像模式

是什么?能做什么?解决什么问题?为什么用它? OpenCV:是一个基于开源发行的跨平台计算机视觉库,实现 一、应用场景: 目标识别:人脸、车辆、车牌...自动驾驶医学影像分析视频内容理解与分析&…...

Linux之Nginx安装及配置原理篇(一)

Nginx安装及配置 前情回顾 首先针对Nginx进程模型,我们回顾一下它的原理机制,我们知道它是通过Master通过fork分发任务节点给予work节点,然后work节点触发了event事件,之后通过一个access_muttex互斥锁,来单线程调用我…...

【Linux网络】NAT和代理服务

NAT 之前我们讨论了,IPv4协议中,IP地址数量不充足的问题。 原始报文途径路由器WAN口时,对报文中的源IP进行替换的过程,叫做NAT。 NAT技术当前解决IP地址不够用的主要手段,是路由器的一个重要功能: NAT能…...

中药药效成分群的合成生物学研究进展-文献精读130

Advances in synthetic biology for producing potent pharmaceutical ingredients of traditional Chinese medicine 中药药效成分群的合成生物学研究进展 摘要 中药是中华民族的文化瑰宝,也是我国在新药创制领域的重要驱动力。许多中药材来源于稀缺物种&#xf…...

【消息队列】RabbitMQ基本认识

目录 一、基本概念 1. 生产者(Producer) 2. 消费者(Consumer) 3. 队列(Queue) 4. 交换器(Exchange) 5. 绑定(Binding) 6. 路由键(Routing …...

OCCT知识笔记之OCAF框架详解

OCAF框架在OCCT项目中的构建与使用指南 Open CASCADE Application Framework (OCAF)是Open CASCADE Technology (OCCT)中用于管理CAD数据的核心框架,它提供了一种结构化方式来组织和管理复杂的CAD数据,如装配体、形状、属性(颜色、材料)和元数据等。本文…...

蓝桥杯 16. 外卖店优先级

外卖店优先级 原题目链接 题目描述 “饱了么” 外卖系统中维护着 N 家外卖店,编号 1 ∼ N。每家外卖店都有一个优先级,初始时(0 时刻)优先级都为 0。 每经过 1 个时间单位: 如果外卖店没有订单,则优先…...

1T 服务器租用价格解析

服务器作为数据存储与处理的核心设备,对于企业和个人开发者而言至关重要。当涉及到租用 1T 服务器时,价格是大家很为关注的要点。然而,1T 服务器租用一个月的费用并非固定不变,而是受到诸多因素的综合影响。​ 影响 1T 服务器租用…...

【JavaWeb】Maven(下)

1 依赖管理 1.1 依赖配置 1.1.1 基本配置 依赖:指当前项目运行所需要的jar包。 一个项目中可以引入多个依赖: 例如:在当前工程中,我们需要用到logback来记录日志,此时就可以在maven工程的pom.xml文件中,引…...

java.lang.ArithmeticException

ArithmeticException算术异常类在java.lang包下,继承RuntimeException运行期异常,算术异常类在Java1.0就有,当发生异常算术条件时抛出算术异常类,譬如除数为0的情况,除数除不尽的情况。 一 异常出现场景 1.1 除数为零…...

openEuler24.03 LTS下安装MySQL8.0.42

目录 前提步骤 删除原有mysql及maridb数据库 安装MySQL 启动MySQL 启动查看MySQL状态 设置MySQL开机自启动 查看登录密码 登录MySQL 修改密码及支持远程连接 远程连接MySQL 前提步骤 拥有openEuler24.03 LTS环境,可参考:Vmware下安装openEule…...

gflags 安装及使用

目录 引言 安装 如何用 gflags 库写代码 如何用命令行使用 gflags 库 gflags 库的其他命令行参数 引言 gflags 是 Google 开发的一个开源库,用于 C 应用程序中命令行参数的声明、定义 和解析。 gflags 库提供了一种简单的方式来添加、解析和文档化命令行标…...

Linux面试题集合(2)

查看系统磁盘使用,当前目录下所有文件夹的使用情况 df -h du -h 更改目录所有人和所有组,包括里面的文件夹下的文件,递归更改 chown -R newowner:newgroup 目录名 只更改文件所有人或者只更改文件所有组 chown newowner file chgrp newgroup …...

致敬经典 << KR C >> 之打印输入单词水平直方图和以每行一个单词打印输入 (练习1-12和练习1-13)

1. 前言 不知道有多少同学正在自学C/C, 无论你是一个在校学生, 还是已经是上班族. 如果你想从事或即将从事软件开发这个行业, C/C都是一个几乎必须要接触的系统级程序开发语言. 虽然现在有Rust更安全的系统级编程语言作为C/C的替代, 但作为入门, C应该还是要好好学的. C最早由B…...

std::ratio<1,1000> 是什么意思?

author: hjjdebug date: 2025年 05月 14日 星期三 09:45:24 CST description: std::ratio<1,1000> 是什么意思&#xff1f; 文章目录 1. 它是一种数值吗&#xff1f;2. 它是一种类型吗&#xff1f;3. std:ratio 是什么呢&#xff1f;4. 分析一个展开后的模板函数5.小结: …...

基于Llama3的开发应用(二):大语言模型的工业部署

大语言模型的工业部署 0 前言1 ollama部署大模型1.1 ollama简介1.2 ollama的安装1.3 启动ollama服务1.4 下载模型1.5 通过API调用模型 2 vllm部署大模型2.1 vllm简介2.2 vllm的安装2.3 启动vllm模型服务2.4 API调用 3 LMDeploy部署大模型3.1 LMDeploy简介3.2 LMDeploy的安装3.3…...

2025.05.17淘天机考笔试真题第三题

&#x1f4cc; 点击直达笔试专栏 &#x1f449;《大厂笔试突围》 &#x1f4bb; 春秋招笔试突围在线OJ &#x1f449; 笔试突围OJ 03. 奇偶平衡树分割问题 问题描述 K小姐是一位园林设计师&#xff0c;她设计了一个由多个花坛组成的树形公园。每个花坛中种植了不同数量的花…...

windows 10 做服务器 其他电脑无法访问,怎么回事?

一般我们会先打开win10自己的防火墙策略&#xff0c;但是容易忽略 电脑之间 路由器上的防火墙&#xff0c;此时也需要查看一下&#xff0c;可以尝试先关闭路由器防火墙&#xff0c;如果可以了&#xff0c;再 设置路由器上的防火墙规则。 将路由器的上网设置 改成 路由模式 &a…...

Linux进程信号处理(26)

文章目录 前言一、信号的处理时机处理情况“合适”的时机 二、用户态与内核态概念重谈进程地址空间信号的处理过程 三、信号的捕捉内核如何实现信号的捕捉&#xff1f;sigaction 四、信号部分小结五、可重入函数六、volatile七、SIGCHLD 信号总结 前言 这篇就是我们关于信号的最…...

【从设置到上传的全过程】本地多个hexo博客,怎么设置ssh才不会互相影响

偶然间&#xff0c;想多建一个博客&#xff0c;但电脑已经有一个博客了&#xff0c;怎么设置ssh才不会互相影响呢&#xff1f; 在 Windows 系统上设置多个 Hexo 博客的 SSH 配置&#xff0c;避免互相影响&#xff0c;通常户就需要为每个博客配置不同的 SSH 密钥&#xff0c;并…...

顶层架构 - 消息集群推送方案

一、推送基础概念简述 在即时通讯&#xff08;IM&#xff09;系统中&#xff0c;最基础的一件事就是“如何把消息推送给用户”。为了实现这个过程&#xff0c;我们要先了解两种常见的网络通信方式&#xff1a;HTTP 和 WebSocket。 1. HTTP 是什么&#xff1f; HTTP 就像一次性…...

Python训练打卡Day26

函数专题1&#xff1a;函数定义与参数 知识点回顾&#xff1a; 函数的定义变量作用域&#xff1a;局部变量和全局变量函数的参数类型&#xff1a;位置参数、默认参数、不定参数传递参数的手段&#xff1a;关键词参数传递参数的顺序&#xff1a;同时出现三种参数类型时 到目前为…...

构建优雅对象的艺术:Java 建造者模式的架构解析与工程实践

一、建造者模式的本质与核心价值 在面向对象的软件设计中&#xff0c;创建复杂对象一直是一个需要精心处理的问题。当一个对象的构建需要多个步骤&#xff0c;并且这些步骤具有不同的组合方式时&#xff0c;传统的构造函数方式会显得力不从心。建造者模式&#xff08;Builder …...

报表控件stimulsoft教程:如何在报表和仪表板中创建热图

Stimulsoft Ultimate &#xff08;原Stimulsoft Reports.Ultimate&#xff09;是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能&#xff0c;Stimulsoft Ultimate包含了…...

(8)python开发经验

文章目录 1 下载python2 pip安装依赖无法访问3 系统支持4 下载python文档5 设置虚拟环境6 编译安装python 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;Qt开发 &#x1f448;&#x1f449;python开发 &#x1f448; 1 下载python 下载地址尽量不要下载最新版…...

0x08.Redis 支持事务吗?如何实现?

回答重点 Redis 支持事务,但它的事务与 MySQL 等关系型数据库的事务有着本质区别。MySQL 中的事务严格遵循 ACID 特性,而 Redis 中的事务主要保证的是命令执行的原子性和隔离性,即所有命令在一个不可分割的操作中顺序执行,不会被其他客户端的命令请求所打断。 最关键的区…...

win32相关(字符编码)

字符编码 ASCII编码 ASCII&#xff08;American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09;是最基础的字符编码标准&#xff0c;用于在计算机和其他设备中表示文本 基本概念 7位编码&#xff1a; ASCII使用7位二进制数&#x…...

使用Langfuse和RAGAS,搭建高可靠RAG应用

大家好&#xff0c;在人工智能领域&#xff0c;RAG系统融合了检索方法与生成式AI模型&#xff0c;相比纯大语言模型&#xff0c;提升了准确性、减少幻觉且更具可审计性。不过&#xff0c;在实际应用中&#xff0c;当建好RAG系统投入使用时&#xff0c;如何判断接收信息是否正确…...

VSCode + Cline AI辅助编程完全指南

VSCode Cline AI辅助编程完全指南 在当今AI快速发展的时代&#xff0c;程序员可以通过AI工具极大地提高工作效率。本教程将详细介绍如何使用VSCode结合Cline&#xff08;Claude AI助手&#xff09;进行AI辅助编程&#xff0c;帮助你提高开发效率&#xff0c;解决复杂问题。 …...