学习python类的总结

前言

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

正文

类的意义

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

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

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

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

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

python 复制代码
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)里面。

类的操作

python 复制代码
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++的结构体的东西,区别就是带了函数)

python 复制代码
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得分,这其实就有所不同了,那么怎么办呢?,我们可以先把他们都认为是学生,然后在学生的基础上再细分英专生和计科生。

python 复制代码
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中其实就是一种复用,会先执行子类的函数,其实也就是,哪种类型执行哪种函数,即使名字相同

python 复制代码
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

希望可以帮到大家

相关推荐
白雪公主的后妈5 分钟前
Python爬虫基础——selenium模块进阶(模拟鼠标操作)
爬虫·python·selenium·xpath表达式
hkj880823 分钟前
SM3在线哈希运行
算法
hakesashou26 分钟前
python如何设计矩阵
开发语言·python·矩阵
工业甲酰苯胺36 分钟前
.NET8.0多线程编码结合异步编码示例
java·算法·.net
捕鲸叉1 小时前
C++并发编程之异常安全性增强
c++·算法·并发编程
深图智能1 小时前
OpenCV实现Kuwahara滤波
opencv·算法·计算机视觉
东北赵四1 小时前
JVM之垃圾回收器ZGC概述以及垃圾回收器总结的详细解析
java·jvm·算法
一个小坑货2 小时前
CentOS 9 Stream 中查看 Python 版本并升级 Python
开发语言·python·centos
hqxnb6662 小时前
构建高效的进程池:深入解析C++实现
开发语言·c++·算法
阿七想学习2 小时前
数据结构《Map&Set&哈希表》
java·数据结构·算法