day  28 
类是对属性和方法的封装,可以理解为模版,通过对模型实例化可以实现调用这个类的属性和方法。比如创建一个随机森林类,然后就可以调用它的训练和预测方法。
一个常见的类的定义包括了:
1、关键字class
2、类名
3、语法固定符号冒号(:)
4、一个初始化函数_init_(self)
注意:init左右各有两个下划线——,需要传入self 这个特殊的参数。
Pass 占位符和缩进
class ClassName:#  类名通常遵循大驼峰命名法(UpperCamelCase)单词的首字母大写,class 是定义类的关键词#类的代码(包含属性定义、方法定义等)pass # pass 是一个占位符,表示这里暂时没有任何内容。class ClassName: # 类名通常遵循大驼峰命名法 (UpperCamelCase),即每个单词的首字母都大写,# # 类的代码块 (可以包含属性定义、方法定义等)# pass # pass 是一个占位符,表示这里暂时没有任何内容   
许多时候,当规划好准备写一个函数、或者一个类,关键词定义后,会先用pass 占位,避免 运行错误,等到想好些什么再去不补充。
比如def 、class 这些定义的关键词后,必须有一个占据缩进位置的代码块。
还有下面这些依赖缩紧的语句,都可以用pass 占位。# 条件语句
x=10
if x>5:pass
else:print ("x is not greater than 5")
# 循环语句
for i in range(3):pass
try:# 尝试执行的代码print("hhh")
except SomeException:pass# 异常处理代码
finally:pass总结:python 通过缩进来定义代码块的结构。当解释器遇到像def,class,if , for 这也样的语句,并且后面跟冒号时,他就期望接下来会有一个或多个缩进的语句来构成这个代码块。如果他没有找到任何缩进的语句。它就无法确定这个结构的范围,因此会抛出indentationError 异常。
pass 语句的存在就是为了解决这个问题:她本身不执行任何操作,但它是一个有效的python语句。所以,当你需要一个语法上存在的代码块,但是暂时又不想在其中放入任何实际的逻辑时,pass就是一个完美的占位符,她告诉解释器:这里有一个代码块,但是她什么不做。
类的初始化方法
初始化方法又叫构造方法、特殊方法
类的两种方法
1、初始化方法
2、普通放大
class Teacher:def __init__(self):self.name="susan"self.subject="python"self.age=30
teacher=Teacher()
print(teacher.name)class Teacher:def __init__(self,name,age):self.name=nameself.subject="python"self.age=age
teacher=Teacher("susan",30)
print(teacher.name)
print(teacher.age)
print(teacher.subject)其中,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="python"self.age=30def teach_lesson(self):print("上课中")def criticize(self):print ("批评人")
t=Teacher()
t.teach_lesson()
t.criticize()   
print(t.name)
类的继承
类已经是比较优秀的封装了,封装了函数、封装了属性
如同装饰器进一步封装了函数的可复用的功能,装饰器函数封装了函数
那么有没有东西可以一步封装类呢?这就引出了类的继承。
在面向对象编程中,继承允许一个类继承另一个类(父类)的属性和方法,从而实现代码复用和功能扩展。子类可以:
1、复用父类的代码(无需重新实现)
2、重写父类的方法(修改或增强功能)
3、添加新的方法和属性(扩展功能)
# 先沿用之前定义的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):def __init__(self,name,subject,age,experience_years):# 调用父类的构造方法初始化基本属性super().__init__(name,subject,age)# 4、此时子类自动拥有了父类的属性和方法# 添加子类特有的属性self.experience_years=experience_years# 重写父类方法,增强功能-----如果子类定义了与父类同名的方法,子类实例会优先调用子类的方法def teach_lesson(self):print(f"{self.name}正在教{self.subject}")# 新增子类特有的方法def give_lecture (self,topic):print(f"{self.name}正在给学生讲解{topic}")
# 创建子类实列
master=MasterTeacher("高教授","数学",30,10)
# 调用继承的方法
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种:
1、直接重写:本质是会优先用子类的同名方法,完全替代父类方法,父类逻辑不会执行。
2、使用supper() 重写,保留父类方法分核心逻辑,并在其基础上扩展。

@ 浙大疏锦行

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

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

相关文章

Docker学习日志-Docker容器配置、Nginx 配置与文件映射

Docker学习日志-Docker容器配置、Nginx 配置与文件映射 docker run 之后能否再次修改卷映射或端口映射? 不能直接修改已创建容器的卷映射或端口映射。 Docker 的设计原则是 **容器是不可变的 **,也就是说: 一旦容器通过 docker run 创建完成&…

cpp实现音频重采样8k->16k及16k->8k

static int convert_8khz_to_16khz(void* dst_buf, void* src_buf, int src_size) {short* in static_cast<short*>(src_buf);short* out static_cast<short*>(dst_buf);int in_samples src_size / sizeof(short);// 边界处理&#xff1a;前两个样本out[0] in[…

【机器学习】机器学习新手入门概述

目录 一、机器学习概念 1.1基本概念 1.2 主要类型 1.2.1 监督学习&#xff08;Supervised Learning&#xff09; &#xff08;1&#xff09;基本介绍 &#xff08;2&#xff09;任务目标 &#xff08;3&#xff09;常见算法 &#xff08;4&#xff09;应用场景 1.2.2 无…

嵌入式硬件篇---ESP32稳压板

制作 ESP32 稳压板的核心目标是&#xff1a;给 ESP32 提供稳定的 3.3V 电源&#xff08;ESP32 的工作电压必须是 3.3V&#xff09;&#xff0c;同时支持多种供电方式&#xff08;比如锂电池、USB、外接电源&#xff09;&#xff0c;并具备保护功能&#xff08;防止过流、接反电…

sql server 删除用户时提示:数据库主体在该数据库中拥有 架构,无法删除

sql server 删除用户时提示&#xff1a;数据库主体在该数据库中拥有 架构&#xff0c;无法删除&#xff0c;怎么办&#xff1f; 1、删除用户ncdb2、 数据库主体在该数据库中拥有 架构&#xff0c;无法删除。3、查看该用户拥有的架构4、找到该用户拥有的这个架构&#xff0c;右键…

分类-鸢尾花分类

目录 基本步骤 决策树&#xff08;分类&#xff09; 导入鸢尾花数据集 赋值给x与y 划分数据集 导入决策树模型 实例化 训练 ​编辑 导入计算准确率的库 计算准确率 随机森林&#xff08;分类&#xff09; 导入鸢尾花的数据集&#xff0c; 赋值x&#xff0c;y 取后一…

单元测试、系统测试、集成测试知识详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、单元测试的概念单元测试是对软件基本组成单元进行的测试&#xff0c;如函数或一个类的方法。当然这里的基本单元不仅仅指的是一个函数或者方法&#xff0c;有可…

Python初学OpenCV:图像预处理进阶指南(二)

——实战技巧与创新应用 > 图像预处理是计算机视觉的"基石",掌握它等于获得了让机器"看懂世界"的魔法棒。 在上一篇教程中,我们学习了OpenCV的基础预处理操作。本篇将带你进入图像预处理的进阶世界,通过**实战案例+创新应用**,教你如何组合多种技…

UML类图--基于大话设计模式

类 一般矩形框代表类&#xff0c;类图分为三层&#xff0c;第一层显示类的名称&#xff0c;如果是抽象类&#xff0c;则就用斜体显示&#xff0c;如果是接口&#xff0c;则使用<<interface>>&#xff1b;第二层是类的特性&#xff0c;通常就是字段和属性&#xff1…

数据结构 ArrayList与顺序表

本节目标&#xff1a;了解线性表和顺序表能够实现简单的顺序表及其基本操作认识 ArrayList类并且知道如何去使用本篇文章正式进入数据结构&#xff01;进入之前&#xff0c;先了解一下什么是线性表和顺序表。1.线性表与顺序表线性表线性表&#xff08; linear list &#xff09…

佳维视工业显示器在除尘与过滤设备中的应用

工业显示器凭借高可靠性、防护性能、高显示质量及多功能性&#xff0c;在除尘与过滤设备中扮演着关键角色&#xff0c;其应用贯穿设备监控、数据管理、故障诊断及远程维护全流程&#xff0c;显著提升了设备的运行效率、稳定性和智能化水平。以下是具体应用场景及优势分析&#…

svn与git Merge重要区别讲解

SVN有哪些merge方式 总的来说&#xff0c;SVN 的 merge 主要有以下 五种类型&#xff1a;1. 同步合并 (Sync Merge) / 追赶合并 (Catch-up Merge) 这是在分支开发过程中最常用的一种合并。目的&#xff1a;让你的功能分支保持最新&#xff0c;及时获取主干&#xff08;trunk&am…

Vue 3 入门教程5 - 生命周期钩子

一、生命周期概述Vue 组件从创建到销毁的整个过程称为生命周期&#xff0c;在这个过程中&#xff0c;Vue 会自动触发一系列的函数&#xff0c;这些函数被称为生命周期钩子。通过生命周期钩子&#xff0c;我们可以在组件的不同阶段执行特定的操作&#xff0c;例如初始化数据、发…

负载均衡Haproxy

简介 HAProxy是一款高性能、开源的负载均衡器与反向代理服务器&#xff0c;主要用于 HTTP、TCP等协议的流量分发&#xff0c;广泛应用于高并发、高可用的网络架构中 HAProxy是法国威利塔罗&#xff08;Willy Tarreau&#xff09;使用C语言开发的一个开源软件 企业版&#xff1a…

PostgreSQL锁机制详解:从并发控制到死锁检测

PostgreSQL锁详解 ————向逍xiangxiaohighgo.com 首先要讲锁的话&#xff0c;必须得先了解并发控制。数据库中的对象都是共享的&#xff0c;如果同时间不同的用户对同一个对象进行修改&#xff0c;就会出现数据不一致的情况。所以如果要实现并发访问&#xff0c;就需要对这…

【启发式算法】RRT*算法详细介绍(Python)

&#x1f4e2;本篇文章是博主人工智能&#xff08;AI&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…

Docker架构深度解析:从核心概念到企业级实践

Docker架构深度解析&#xff1a;从核心概念到企业级实践一、Docker架构全景图1.1 整体架构示意图二、核心组件深度解析2.1 Docker Daemon工作机制三、镜像与容器原理3.1 镜像分层结构3.2 容器生命周期四、网络架构详解4.1 网络模式对比4.2 Bridge网络实现原理五、存储架构与实践…

PPT自动化 python-pptx - 8: 文本(text)

在使用 python-pptx 库操作 PowerPoint 文档时&#xff0c;理解文本的结构和处理方式至关重要。本文将深入探讨文本在形状中的组织层级、访问方式以及各级别的格式化选项。文本容器与层级结构可容纳文本的形状&#xff1a; 只有自动形状 (Auto shapes) 和表格单元格 (table cel…

使用realsense进行目标检测并标识目标深度

涉及知识点都在代码中注释了&#xff0c;直接看代码 // This example is derived from the ssd_mobilenet_object_detection opencv demo // and adapted to be used with Intel RealSense Cameras // Please see https://github.com/opencv/opencv/blob/master/LICENSE#includ…

OpenWrt Network configuration

OpenWrt Network configuration device 和 interface 关系device device 表示底层的网络设备&#xff0c;如物理网卡、桥接设备&#xff08;bridge&#xff09;、VLAN 设备等。 通过 config device 定义&#xff0c;描述设备类型、端口成员、VLAN 等属性。 例如&#xff1a;br…