python定义一个类完了执行啥都没有_我是这样学会了Python中的类与对象知识,网上没有看到这种见解...

最近有许多小伙伴问我要入门 Python 的资料,还有小伙伴完全没有入门 Python 就直接购买了我的 pandas 专栏。因此我决定写几篇 Python 数据处理分析必备的入门知识系列文章,以帮助有需要的小伙伴们更好入门。

前言

关于 Python 中的类与对象相关知识,网络上已经有非常多的教程。但对于初学者来说,仍然是一个非常难以理解的事情。今天我尝试从一个奇怪的角度讲解使用类、对象相关知识。

本文需要读者已经了解 Python 中关于 列表、字典、自定义函数基本认知

物以类聚

每当我学习一个新的工具,都会自问:"为什么我需要他?"

假设我需要3位学生的相关数据(姓名、年龄、成绩),那么首先想到的可能是用列表表示。

其中有2种方式,第一种如下:

f91ee9ea-1077-496b-9426-eccf8018988d.png

按属性归类,如上图,姓名单独一个列表

这显然是一种不合理的归类,因为需求往往是对一个学生做处理。

例如,打印第2位学生的信息:

e6d32886-09fa-4cf1-9580-27033bf13f7d.png

总是要从多个列表中,取出某位置上的数据

如果需要定义统一的处理函数,那情况更加糟糕:

753c4ef4-c9d8-4aa3-9eb3-b1b781acfc1d.png

任何处理学生的函数都需要传入3个数据列表

一种更好的归类方式是:

f1b21b1c-bfcf-437f-80cd-3f51f21ebd6a.png

每位学生一个列表

这解决了方式1的缺点,但是他仍然不完美。毕竟我们要记住姓名是在列表中的第一个位置上。

这是因为数据结构不合理,我们不应该使用列表。

那么,有什么结构能解决这痛点?

没错,就是字典:

2219afb6-e3af-4556-a143-b4e7ef9c0597.png

此时字典中的 key 就是属性名字,对于的 value 就是值

现在任何处理函数直接传入某学生的信息字典即可:

af65ab04-2c06-43bd-8504-37cb33f32f03.png

但是,这还是不够完美,想想现在的学生信息字典只是保存了数据。

如果关于学生的操作也能保存在字典中,那么就完美了。

还真可以!

我们可以把函数保存在字典中:

69082758-4db2-42b5-802f-4db24adfc416.png

注意字典中的 show_me 没有执行函数(因为没有在函数名字后写括号),只是保存了函数对象

那么当需要执行的时候,只需要:

0a029fc7-9233-4f47-a38a-d6f982505a4b.png

因为 s2['show_me'] 相当于取出了函数 show_me 。而执行函数需要函数对象后用括号。

因此 s2'show_me' 相当于 show_me(s2)

最后,把创建学生信息字典的过程统一为一个函数:

b9824d11-46cb-48c1-85e5-769e0f690b57.png

完美!

如果不使用类与对象,相信这已经是最好的结果

但此时还是有一个瑕疵,当需要输出某学生的信息时,需要传入自身给予 show_me 函数:

02aa5e01-95be-478c-8c51-3fd379f91251.png

这是在有点丑陋

更进一步

我们暂且把以上方式称为"字典实现"。

不管使用什么方式组织代码,我们的目的其实是为了更好围绕一个主题管理多个变量(例子中的学生即为主题,其中姓名、年龄、分数就是变量)。

类就是一种管理的手段,看看如何定义:

e885564d-5886-4ded-be1c-79f7ae463161.png

init 函数是初始化时会执行的函数

现在我们不关注 self 实际是什么,但是要知道 self.name = name ,这类似往字典写入了数据

是不是很像之前我们定义的 create_st ?

那么,如何得到一个学生(类比字典实现方式中一个学生信息字典)?非常简单:

5daad6d2-327a-4daa-9a3d-f75fe414de1e.png

类名 + 括号 ,这种操作称为"实例化",因为这会让我们得到一个实体(称之为"实例"),变量 s1 指向了这个实体

此时变量 s1 指向的对象,与字典非常相似,只是他访问数据的方式更加简洁:

d5ccaa3f-7a80-4188-97f7-af9cc1aa6ac6.png

对象变量 + 点 + 属性名字 ,即可访问对应的数据。这类似于 字典对象[属性名字]

别以为我是随意使用字典来类别这些概念:

自定义类型的定义决定了实体的结构。比如 __init__ 中执行的代码决定了字典有哪些 key 和 value

实例化一个实例,相当于生成了一个带数据的字典

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值