Python读书笔记23(浅谈为什么要用类)

题外话:好几个朋友和我提出最好能写一个Python入门的合集版,我会尽快将基础知识分享完,然后重新整理一下过去分享的所有材料。

如果只是想学Python的数据分析,爬虫,不想了解复杂编程,可以略过剩下三篇的文章,本周只分享类的用法!前方高能!一个字“不好理解!”

今日闲扯正文:

正常本期要和大家分享类的使用的,但是自己纠结了好久要不要分享,纠结的原因是类这种用法针对Python编辑游戏或者编辑一些日常应用程序很有用,但是和我想要做的两个方向爬虫和数据分析其实关联不是那么大。

第二个问题就是为什么要有类,类这个东西到底是干嘛的,有什么存在意义!

我们先举一个例子!

我问上帝,我想要知道自己的分数,所以有了int型。

我问上帝,我想要知道全班的分数,所以有了列表。

我问上帝,我还想知道每个人得了什么分数,所以有了字典。

我问上帝,我想知道每个人的所有身高、体重、血压、颜值评分、睡觉否、吃饭否、婚否、性取向!

上帝和善的对我说!

上帝说完后,创造了类!

一、历史长河太长,我们从整型说起!

如果知道某个个体的分数的时候,我们一个变量即可;当我们想获取某个集体的分数的时候,就延伸到了列表,或者元组。列表(元组)虽然是有序的,但是我们不知道他们都是谁的。很多时候做数据分析用列表即可,当然后期数据处理其实用的更多的是和list很像的Series,和Excel很像的DataFrame(不知道是什么没关系,证明还有很多新东西可以学习)

学到列表基本上已经满足了我们的需求,直到有一天我想知道每个人的分数分别是什么!

二、了解个体信息,需要用到字典!

其实字典是怎么来的呢?其实字典就是从列表来的,那我们先用笨方法实现,一列存储姓名,一列存储分数,就解决了人与分数对应的问题!

红色字很多,大意就是列表可以实现,但是很麻烦,所以出现了字典。字典可以通过键值对的方式,快速的增删改查一对信息!

但是当我需要更多的信息的时候呢?比如上文上帝让我滚的那个问题!字典已经无法满足我们的需求,只能有更丰富的应用类来实现了。其实类并不是一种存储形式,所以和列表、字典放在一起并不是特别恰当,之所以这么任性,是希望告诉大家,类是满足我们现实中复杂应用的产物!

三、面向对象编程的产物--类

在面向对象编程中,编写表示现实世界中的事物或者场景。类是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。

好啦!上面那段话理解起来一定尤为痛苦,我们直接来定义一个类吧!我们定义一个人!

class 类的名称():

def __init__(self, 属性1, 属性2):

self.属性1= 属性1

self.属性2= 属性2

上述代码中蓝色是不可变的,红色是可变的!

每个类初始化的时候和函数一样要定义一个名称,函数中可以设置传入的实参个数,类也是同理,不过类中是在def _init_中设置实参个数的。每个类初识定义的时候都要设置若干个初识属性,比如人,一生下来肯定有姓名和性别。大多数情况这两个属性都是不需要改变的,所以我们在定义一个人的时候就要告诉电脑我们定义的这个人的姓名和性别是什么!

类最不好理解的两点如下:

1、def __init__

备注:init两边是两个下划线,很多书印刷时候看不出来!我就没看出来!

def开头是定义函数用的,但在这里他不是函数,而是方法。方法是特殊的函数,使用在类内的函数称为方法。而def __init__又是更为特殊的函数(方法)。他是用来初始化类对象的所有属性的!

2、self

这个是什么意思呢,其实就是初始化用的。如果我用这个对象创造了一个人:阿狸。这个self就是阿狸的意思。self.name就是定义阿狸的名字叫阿狸!

不行,晕了!

假若我这样说你还不理解,请记住这样用就好了!

四、类的第一次定义与使用!

我们定义一个类后,可以将类初始化后赋值给一个变量,然后使用变量.属性就可以获取对应的返回值!

我们接下来可以给这个类赋值为更多的属性,比如我们给这个类定义睡觉、吃饭等方法!

五、方法的使用!

定义方法就是可以在自定义init后面新定义很多函数(方法),调用的方法就是将变量赋值给某个类后,直接用变量.方法调用即可!本案例分享的都是没有传入实参的,下期再和大家分享更多的类的应用!

原文发布于微信公众号 - 阿凯的Excel(akexcel)

原文发表时间:2018-01-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

使用Scala的强大api快速加工数据

3344
来自专栏技术墨客

Java函数式开发——优雅的Optional空指针处理

    在Java江湖流传着这样一个传说:直到真正了解了空指针异常,才能算一名合格的Java开发人员。在我们逼格闪闪的java码字符生涯中,每天都会遇到各种nu...

902
来自专栏Crossin的编程教室

【Python 第21课】 函数的参数

今天发现了一个iPad上的游戏,叫Cargo-Bot。这个游戏需要你用指令控制一个机械臂去搬箱子。游戏里蕴含了很多编程的思想,包括循环、函数调用、条件判断、寄...

3189
来自专栏C语言及其他语言

[每日一题]大、小写问题

题目描述 输入一串字符,将其中的大写变成小写,若不为大写则原样输出 输入 任意字符串(长度在100以内)以回车表示输入结束 输出 将其中的大写 输出相应的小写,...

2576
来自专栏Python小屋

Python正则表达式中的贪心模式和非贪心模式

声明:最近发现有人利用我在百度云盘里免费分享的127课Python视频盈利,并声称获得我的授权。在此,我声明,文末百度云盘里的Python视频是免费的,不会授权...

2657
来自专栏程序你好

Java和c++构造函数的区别是什么?

如果你是一个c++程序员,现在正在学习Java,你会发现这两种流行的面向对象编程语言有很多相似之处。这两种语言都支持抽象、封装、类、对象和其他OOP概念。但是,...

624
来自专栏我杨某人的青春满是悔恨

《编程的智慧(初稿)》读后感

王垠更新了文章,加入了Optional跟Union比较的内容,所以我也来更新一下。垠神认为Optional并没有什么卵用,Java8的Optional我不是很了...

832
来自专栏java学习

Java每日一题_关于类继承常见的易错面试题

子类的构造方法总是先调用父类的构造方法,如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类不带参数的构造方法。 而父类没有无参的构造函数,...

802
来自专栏北京马哥教育

Python 工匠:善用变量来改善代码质量

1448
来自专栏Golang语言社区

转-Golang语言Interface漫谈

一件作品的诞生,通常是一个设计师独立完成的。因为这样,一件建筑也好,画作或者音乐舞蹈也好,才能真实反映出其个性。而正是这种不同于其他同类的独特一面,正是这种发自...

3125

扫码关注云+社区