学习python类的总结

news2025/1/16 7:28:00

前言

之前天天看到有人用类相关的知识但是学校老师就是没讲过,然后再读了莫烦老师的讲解后,有了一定的了解,进行一个总结。

正文

类的意义

类其实就是正如他的名字一样,是一类事物(其实叫做对象)的总称,就像学生信息,每个学生都是一个事物(对象),但是我们对每一个学生的信息都进行一个变量的输入的话,未免过于冗杂,就像下面

student1={'名字':'hh','年龄':19,'性别':'男'}
student2={'名字':'nn','年龄':20,'性别':'男'}
student3={'名字':'ww','年龄':20,'性别':'男'}

虽然看起来比较整齐,但其实录入的时候很麻烦,所以我们需要一个优雅地方式,函数

def luru(people,xm,nn,xb):
    people['姓名']=xm
    people['年龄']=nn
    people['性别']=xb
student1=dict()
luru(student1,'hh',19,'男')

这样输入信息只需要一个简单的函数了对吧,但是如果我现在想要输出内容呢?可能需要另一个函数

def shuchu(people):
    for k,v in people.items():
        print(k,v)
def luru(people,xm,nn,xb):
    people['姓名']=xm
    people['年龄']=nn
    people['性别']=xb
student1=dict()
luru(student1,'hh',19,'男')
shuchu(student1)

那么现在是一个学生,但如果有很多个学生,我就需要定义很多个dict再把他们放到一个函数里去赋值,而且如果有很多个函数呢?而且他们都是有关学生的相关操作,这样对同一种类型的对象进行操作和初始化的过程,就可以被放进一个大大的类(class)里面。

类的操作

class student:#student是类的名字,下面都要用这个来命名
    def __init__(self,name,age,gender):#每个类在被定义的时候都会运行一遍这个初始化函数就是__init_()
        self.name=name
        self.age=age
        self.gender=gender

    # 这是初始化函数,一个对象肯定有他的最初信息的,如果真没有,可以pass掉
    # 这里的self是表示属于这一类的变量,其实就是student.name,表示这个变量是属于这个类的
    # 不加self.的变量不被认为是这个类的变量

    def print_xx(self):#这里有没有参数都要加上self表示这是属于这一类的函数
        print(self.name)
        print(self.age)
        print(self.gender)


student1=student('hh',19,'男')
student1.print_xx()

        这里对这个self进行一个解释,作用就是说明这个变量或者这个函数是这个类所拥有的,其实你可以把这个self看作是一个躯壳,然后在student1被定义这个类以后,这个躯壳就被装进student1的灵魂了,所以之前就是self.name表示是self的name,然后现在就是student1.name表示是第一个学生的名字。然后你就可以在之后的函数中对其进行使用了,但是注意类里面的函数都要加上self的参数,表示这是这个类的函数,否则会报错。

然后你就可以快乐的使用类对一个变量进行定义,类里的函数也可以使用

(因为调用类的时候要用xx.yy,我有时候觉得这就像一个带了函数的python里类似c++的结构体的东西,区别就是带了函数)

class student:
    def __init__(self,name,age,gender):
        self.age=age
        self.gender=gender
    def print_xx(self):
        print(self.name)
        print(self.age)
        print(self.gender)


student1=student('hh',19,'男')
student1.print_xx()
student2=student('nn',20,'男')
student2.print_xx()
student3=student('ww',20,'男')
student3.print_xx()

看,这样是不是就很方便录入信息和进行操作了,优雅~

类的拓展

类的继承

在这里,我们进一步对类进行应用,那么学生之间亦有不同,就像英专生和计算机学生,他们虽然都需要录入相同的个人基本信息,但是英专生需要额外录入他的英语四六级成绩,而计算机学生需要录入他的csp得分,这其实就有所不同了,那么怎么办呢?,我们可以先把他们都认为是学生,然后在学生的基础上再细分英专生和计科生。

class student:
    def __init__(self,name,age,gender):
        self.name=name
        self.age=age
        self.gender=gender
    def print_xx(self):
        print(self.name)
        print(self.age)
        print(self.gender)

class Endlish_student(student):
    def __init__(self,name,age,gender,cet4,cet6):
        super().__init__(name,age,gender)
        self.cet4=cet4
        self.cet6=cet6
    def print_x(self):
        super().print_xx()
        print(self.cet4)
        print(self.cet6)

class Computer_student(student):
    def __init__(self,name,age,gender,csp):
        super().__init__(name,age,gender)
        self.csp=csp
    def print_x(self):
        super().print_xx()
        print(self.csp)


student4=Endlish_student('gg',20,'男',600,550)
student4.print_x()#他可以输出自己的函数
student4.print_xx()#他依然可以继承父类的函数
student5=Computer_student('gg',20,'男',400)
student5.print_x()#他可以输出自己的函数
student5.print_xx()#他依然可以继承父类的函数

我们可以在定义类的时候在后面加小括号并且输入父类,这样他就可以继承父类的所有变量,函数了,但是需要注意的是,继承函数是指在类以外可以,如果在类里面要使用父类的函数的话,那么需要使用super().这个前缀表示使用是父类的函数。

但是定义好了之后,在使用时,就可以直接使用父类的函数即可(一般不使用初始化函数)。

ps:正因为使用时可以直接使用父类和子类的函数,但是如果子类和父类有两个相同的函数,那么默认先使用子类的函数。

这就叫做类的继承。

类的多态

对于类的复用,即相同的函数发挥不一样的作用,上面ps中其实就是一种复用,会先执行子类的函数,其实也就是,哪种类型执行哪种函数,即使名字相同

def printzhaunye(anystudent):
    anystudent.print_x()
printzhaunye(student4)
printzhaunye(student5)

像这种,就可以将每个类的输出函数名字定义成相同的,那么输入是那一类,就会调用哪一类的输出函数,非常的方便,就可以进行一个输出类型的兼顾。

一些细节

对于类的继承来说,如果不想让子类继承父类的函数或者变量,那么可以在前面加上两个下划线__

那么子类中就不会有相关的函数或者变量了,你也找不到他。

并且如果子类想要用父类的变量可以直接当自己的变量用self.name就可以使用,但是如果要调用父类的函数的话就要用super().__init__(, , , , )这种类型才可以

后记

这就是有关类的一些相关知识,我是蒟蒻,有什么做的不好的希望多多指正,下面是两个我学习类用到的资源:

Class 类 | 莫烦Python

【4个项目学会Python 封装和多态】https://www.bilibili.com/video/BV1Kx421C7C1?vd_source=928e7968871dbf10f26b1952d35eabfa

希望可以帮到大家

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPS excel使用宏编辑器合并 Sheet工作表

使用excel自带的工具合并Sheet表,我们会发现需要开通WPS会员才能使用合并功能; 那么WPS excel如何使用宏编辑器进行合并 Sheet表呢? 1、首先我们要看excel后缀是 .xlsx 还是 .xls ;如果是.xlsx 那么 我们需要修改为 .xls 注…

WPF、控件模板(ControlTemplate)和数据模板(DataTemplate)

前言 在 WPF 中,控件种类丰富且功能非常完善。一个显著的优点是 WPF 提供了强大的自定义能力和灵活的用户界面表现,能够满足各种复杂的应用需求。其中,ControlTemplate 和 DataTemplate 是两个非常重要的概念,分别用于自定义控件…

Redis十大数据类型详解

Redis(一) 十大数据类型 redis字符串(String) string是redis最基本的类型,一个key对应一个value string类型是二进制安全的,意思是redis的string可以包含任何数据。例如说是jpg图片或者序列化对象 一个re…

Python Wi-Fi密码测试工具

Python Wi-Fi测试工具 相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点…

qml AngleDirection详解

1、概述 AngleDirection 是 QML(Qt Meta Language)中用于定义粒子发射方向的一个类,它属于 Qt Quick Particles 模块。AngleDirection 通过设置角度范围来控制粒子从发射器射出时的初始方向。这个类在创建具有特定发射模式的粒子效果时非常有…

VSCode使用纪要

1、常用快捷键 1)注释 ctrl? 单行注释, altshifta 块注释, 个人测试,ctrl? 好像也能块注释 2)开多个项目 可以先开一个新窗口,再新窗口打开另一个项目,这时就是同时打开多个项目了。 打开…

单独编译QT子模块

单独编译QT子模块 系统 win qt-everywhere-src-5.12.12 下载源码: https://download.qt.io/archive/qt/5.12/5.12.12/single/ 参考: https://doc.qt.io/qt-5/windows-building.html 安装依赖 https://doc.qt.io/qt-5/windows-requirements.html Per…

浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索

安科瑞吕梦怡 18706162527 摘 要:分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上,利用太阳能进行发电的一种可再生能源利用方式,与传统的大型集中式光伏电站相比,分布式光伏发电具有更灵活…

DAMA GDPA 备考笔记(二)

1. 考点分布 2. 第二章 数据处理伦理知识点总结 伦理是建立在是非观念上的行为准则。伦理准则通常侧重于公平、尊重、责任、诚信、质量、可靠性、透明度和信任等方面。数据伦理是一项社会责任问题不是法律问题。 度量指标:培训员工人数、合规/不合规事件、企业高管…

Unity中实现倒计时结束后干一些事情

问题描述:如果我们想实现在一个倒计时结束后可以执行某个方法,比如挑战成功或者挑战失败,或者其他什么的比如生成boss之类的功能,而且你又不想每次都把代码复制一遍,那么就可以用下面这种方法。 结构 实现步骤 创建一…

【Elasticsearch】filterQuery过滤查询

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

带头双向循环链表(数据结构初阶)

文章目录 双向链表链表的分类概念与结构实现双向链表定义链表结构链表打印判空申请结点初始化头插尾插头删尾删查找指定位置插入和删除销毁链表 顺序表和链表的分析结语 欢迎大家来到我的博客,给生活来点impetus!! 这一节我们学习双向链表&a…

在eNSp上telnet一下吧

在上篇博客:DNS 我们提到了telnet和设备带外管理、带内管理,它确实是非常有趣的一个知识点哦,接下来我们一起来学习学习吧~ Telnet(远程登陆协议) Telnet基于TCP 23号端口,典型的C/S架构模式,是…

Spring MVC复杂数据绑定-绑定集合

【图书介绍】《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》_【新华文轩】springspring mvcmybatis从零开始学(视频教学版) 第3版 正版-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版…

基于禁忌搜索算法的TSP问题最优路径搜索matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于禁忌搜索算法的TSP问题最优路径搜索,旅行商问题(TSP)是一个经典的组合优化问题。其起源可以追溯到 19 世纪初,…

静态综合路由实验

实验拓扑 实验要求 1.除R5的环回地址外,整个其他所有网段基于192.168.1.0/24进行合理的IP地址划分 2.R1-R4每个路由器存在两个环回接口,用于模拟pc网段;地址也在192.168.1.0/24这个网络范围内 3.R1-R4上不能直接编写到达5.5.5.0/24的静态路由…

前端组件开发:组件开发 / 定义配置 / 配置驱动开发 / 爬虫配置 / 组件V2.0 / form表单 / table表单

一、最早的灵感 最早的灵感来自sprider / 网络爬虫 / 爬虫配置,在爬虫爬取网站文章时候,会输入给爬虫一个配置文件,里边的内容是一个json对象。里边包含了所有想要抓取的页面的信息。爬虫通过这个配置就可以抓取目标网站的数据。其实本文要引…

[Deep Learning] Anaconda+CUDA+CuDNN+Pytorch(GPU)环境配置-2025

文章目录 [Deep Learning] AnacondaCUDACuDNNPytorch(GPU)环境配置-20250. 引子1. 安装Anaconda1.1 安装包下载:1.2 启用安装包安装1.3 配置(系统)环境变量1.4 验证Anaconda是否安装完毕1.5 Anaconda换源 2. 安装CUDACuDNN2.1 判断本机的CUDA版本2.2 下载适合自己CU…

直播预告丨Arxiv Insight:用 AI 重新定义论文检索

1月16日晚上20:00-20:50,Zilliz直播间,深圳大学计算机视觉所硕士牛增豪先生将带来《Arxiv Insight:用 AI 重新定义论文检索》分享,届时他将讲述从零到一构建 Arxiv Insight产品的过程,思考以及未来计划。欢迎大家锁定Z…

STM32 FreeRTOS 的任务挂起与恢复以及查看任务状态

目录 任务的挂起与恢复的API函数 任务挂起函数 任务恢复函数 任务恢复函数(中断中恢复) 函数说明 注意事项 查看任务状态 任务的挂起与恢复的API函数 vTaskSuspend():挂起任务, 类似暂停,可恢复 vTaskResume()&#xff1a…