学习python类的总结

前言

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

正文

类的意义

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

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

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

def luru(people,xm,nn,xb):people['姓名']=xmpeople['年龄']=nnpeople['性别']=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['姓名']=xmpeople['年龄']=nnpeople['性别']=xb
student1=dict()
luru(student1,'hh',19,'男')
shuchu(student1)

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

类的操作

class student:#student是类的名字,下面都要用这个来命名def __init__(self,name,age,gender):#每个类在被定义的时候都会运行一遍这个初始化函数就是__init_()self.name=nameself.age=ageself.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=ageself.gender=genderdef 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=nameself.age=ageself.gender=genderdef 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=cet4self.cet6=cet6def 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=cspdef 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.mzph.cn/diannao/67163.shtml

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

相关文章

JavaSE学习心得(多线程与网络编程篇)

多线程-网络编程 前言 多线程&JUC 多线程三种实现方式 第一种实现方式 第二种实现方式 第三种实现方式 常见成员方法 买票引发的安全问题 同步代码块 同步方法 Lock锁 生产者和消费者 常见方法 等待唤醒机制 练习 抢红包 抽奖 多线程统计并求最…

Pytorch基础教程:从零实现手写数字分类

文章目录 1.Pytorch简介2.理解tensor2.1 一维矩阵2.2 二维矩阵2.3 三维矩阵 3.创建tensor3.1 你可以直接从一个Python列表或NumPy数组创建一个tensor:3.2 创建特定形状的tensor3.3 创建三维tensor3.4 使用随机数填充tensor3.5 指定tensor的数据类型 4.tensor基本运算…

candb++ windows11运行报错,找不到mfc140.dll

解决问题记录 mfc140.dll下载 注意:放置位置别搞错了

​公专网一体5G工业路由器,智慧电网全链路加密监控管理

随着可再生能源的集成 电网调度策略复杂性增加 需更精细的并网管理以平衡供需 传统电力网络的通信基础落后 难以适应电力设施的广泛分布 和日益增长的管理维护需求 计讯物联5G公专网一体路由器 通过融合公网和专网的优势 有效解决了现代电网对于 高效、灵活和安全通信的需求 ↓…

【Linux】--- 进程的等待与替换

进程的等待与替换 一、进程等待1、进程等待的必要性2、获取子进程status3、进程等待的方法(1)wait()函数(2)waitpid函数 4、多进程创建以及等待的代码模型5、非阻塞接口 轮询 二、进程替换1、替换原理2、替…

zerotier搭建虚拟局域网,自建planet

基于该开源项目 自建planet节点,更快速,更安全 本教程依据docker-zerotier-planet 项目文档书写,并以linux(centos 7)和windows作为示例,需要其他系统配置方法,可移步项目文档 一. 前置资源 具有外网ip的服务器 后面…

屏幕轻触间:触摸交互从 “感知” 到 “智算” 的隐秘路径

从用户点击屏幕到前端感知及数据处理全流程剖析 引言 在移动智能设备与触摸交互技术深度融合的当下,当我们的手指轻触手机屏幕,一系列复杂且精妙的技术流程便瞬间启动。这一过程涵盖硬件层、驱动层、操作系统层、应用层,甚至延伸到后端的数…

深入Node.js集群:原理、优势与搭建实战,如何应对高并发

文章目录 一、Node.js 集群简介二、Node.js 集群原理剖析2.1 主从模型2.2 负载均衡机制2.3 进程间通信(IPC) 三、Node.js 集群优势详解3.1 性能提升3.2 高可用性3.3 资源利用率优化 四、Node.js 集群搭建实战4.1 准备工作4.2 创建主控制节点4.3 工作节点…

数字普惠金融对新质生产力的影响研究(2015-2023年)

基于2015—2023年中国制造业上市公司数据,探讨了数字普惠金融对制造业企业新质生产力的影响及作用机理。研究发现,数字普惠金融有助于促进制造业企业新质生产力的发展,尤其是在数字普惠金融的使用深度较大的情况下,其对新质生产力…

数据仓库基础常见面试题

1.数据仓库是什么 ‌数据仓库(Data Warehouse)是一个面向主题的、集成的、非易失的、随时间变化的数据集合,用于支持企业的管理决策‌。它不同于传统的操作型数据库,后者主要用于处理日常业务交易和实时查询,而数据仓库…

记一次OpenEuler Linux磁盘分区表损坏的数据恢复

问题复现 原本有一台GIS地图服务器存放大量数据,突然有一天磁盘满了,于是运维人员照常进行磁盘扩容。但由于误操作,导致使用fdisk的时候把分区表损坏了,表现如下: 这里可以看到启动时能看到xvda被分为了xvda1和xvda2…

分布式数据存储基础与HDFS操作实践(副本)

以下为作者本人撰写的报告,步骤略有繁琐,不建议作为参考内容,可以适当浏览,进一步理解。 一、实验目的 1、理解分布式文件系统的基本概念和工作原理。 2、掌握Hadoop分布式文件系统(HDFS)的基本操作。 …

APP推荐:全新TV端来了,8K原画电视版

▌ 软件介绍 B站都不陌生吧,一个能追番、学习、娱乐的多元平台,之前也分享过几款第三方TV端,其中的BV最近更新了全新版本。 使用了全新的UI界面,由之前的顶部菜单栏改成了侧边布局,已解锁限制&…

【数据结构】基础知识

目录 1.1 什么是数据结构 1.2数据 1.3 逻辑结构 1.4 存储结构 1.4.1 顺序存储 1.4.2 链式存储 1.4.3 索引存储 1.4.4 散列存储 1.5 操作 1.1 什么是数据结构 数据的逻辑结构以及存储操作 数据结构没有那么复杂,它就教会你一件事:如何更有效的…

【Rust】变量与可变性

目录 思维导图 1. 变量与可变性 1.1 不可变性 1.2 可变性 2. 常量 2.1 定义与特性 3. 变量遮蔽(shadowing) 3.1 影子机制 3.2 遮蔽与可变性的区别 4.示例 4.1 变量和可变性示例 4.2 可变变量示例: 4.3 常量示例: 4.4 遮蔽示例&a…

Mycat读写分离搭建及配置超详细!!!

目录 一、Mycat产生背景二、Mycat介绍三、Mycat安装四、Mycat搭建读写分离1、 搭建MySQL数据库主从复制2、 基于mysql主从复制搭建MyCat读写分离 五、Mycat启动常见错误处理1、Caused by: io.mycat.config.util.ConfigException: SelfCheck### schema TESTDB refered by user u…

【6】Word:海名公司文秘❗

目录 题目 List.docx Word.docx List.docx和Word.docx 题目 List.docx 选中1/4全角空格复制→选中全部文本→开始→替换:粘贴将1/4全角空格 替换成 空格选中全部文本→插入→表格→将文本转化成表格→勾选和布局→自动调整→勾选 选中第一列,单机右键…

【Rust】引用与借用

目录 思维导图 1. 引用与借用的基本概念 1.1. 引用示例 2. 借用的规则 2.1. 可变借用示例 2.2. 借用的限制 3. 引用的生命周期 思维导图 1. 引用与借用的基本概念 引用的定义:引用是一种指向数据的指针,但与裸指针不同,Rust的引用在编…

贪心算法详细讲解(沉淀中)

文章目录 1. 什么是贪心算法?(贪婪鼠目寸光)经典例题1.1.1 找零问题1.1.2最小路径和1.1.3 背包问题 2.贪心算法的特点2.1 证明例1 3.学习贪心的方向心得体会 1. 什么是贪心算法?(贪婪鼠目寸光) 贪心策略&a…

【专题】2025年节日营销趋势洞察报告汇总PDF洞察(附原数据表)

原文链接: https://tecdat.cn/?p38813 在当今复杂多变且竞争激烈的消费市场环境下,节日营销已成为企业获取市场份额、提升品牌影响力的关键战略时机。我们深知深入洞察节日营销趋势对于企业决策的重要性。 本报告汇总基于对 2024 年多个关键消费节点及…