Python 的类和对象入门级讲解

Python 的类和对象入门级讲解 前言:本人是Python初学者。由于之前没有任何编程语言的学习经验,在学到Python的类和对象的时候,被‘高深’的概念虐得死去活来。上网提问,得到的回复几乎都是‘大神们’藏着掖着迫不得已才挤出来的只言片语;上网搜文章,长长的篇幅,那些字都认得,但是就是不知道是什么意思,并且都是反复地复制粘贴而导致文章排版极其…

前言本人是Python初学者。由于之前没有任何编程语言的学习经验,在学到Python的类和对象的时候,被‘高深’的概念虐得死去活来。上网提问,得到的回复几乎都是‘大神们’藏着掖着迫不得已才挤出来的只言片语;上网搜文章,长长的篇幅,那些字都认得,但是就是不知道是什么意思,并且都是反复地复制粘贴而导致文章排版极其辣眼睛。

一个阴郁的冬天,我在YouTube上搜到一个视频作者John Philip Jones,发现一个关于Python类和对象的讲解。这是目前为止我看到的最利于小白学习Python的讲解方法。由于在国内上YouTube不方便,打算写个文章把内容搬运过来,同时加入一些自己的学习心得,希望可以为像我一样小白中的小白提供这些信息。

版权作者,再次重复三遍:John Philip JonesJohn Philip JonesJohn Philip Jones

----------------------------------------------------

建议直接翻墙观看,如果你不想或者不能翻墙,那咱们开始吧:

(提示:结论在最后写出,但是过程非常重要)

首先,我已经假定你已经看了无数遍的垃圾文章,然后依然搞不懂类和对象,但是呢起码知道有类和对象这么两个玩意儿。

由于你没有编程经验,所以无法从学过的编程语言里通过类比去理解Python的‘类和对象’。咱们用生活中的例子来说说,建房子。

类(class): 相当于施工图纸(blueprint)

对象(object):房子(已经建造好的)

假设你手上有施工图纸(Blueprint),里面有房子的所有信息(盖几层,厨房在哪,卧室在哪,怎么建)。

你已经在憧憬你以后在这个新家的生活了,买贵的家具,在厨房做好吃哒........但是呢,这些都是你的YY,你要做这些事情必须要等房子真正建好了以后才行。如果房子中途烂尾,你就啥也做不了,梦想无处安放。

所以说,‘一个建好的房子’很重要。在Python中,‘一切皆为对象’,这也是大家称之为 object oriented的意思。有了对象,咱们才能搞事情!!!

接着来:

对于建好的房子也许会稍稍不一样,每个人都有各自的喜好,就像图中看到的,可能是房子的户型一样,但是呢,颜色不一样。重点:它们都是根据‘施工图纸’造出来的。

----------------------------------------------------------

例子结束,带着例子中想表达的‘精神’,咱进入Python来看看‘类和对象’:

用变量赋值来说:a = 2

据说按照咱一般的理解,创建一个变量命名为a,然后赋值2。相当于把2放进名叫a的篮子里,blablablabla.....

滚粗!让我们这次从另外一个角度来考虑 a = 2 这个问题,开始:

当你在Python中打出 a = 2, 然后回车。Python中有一个叫 ‘integer class’ 的玩意儿被‘唤醒’。

然后,这个integer class会跟你的要求,在执行区‘创建’一个对象,这个对象是根据integer class的施工图纸创造的。所以,这个对象(图中圆圆的东西)会有integer class的特征或者属性。(这个过程,就是你看到房子就快建好了)

还记得那个 a = 2里面的 a 吗?它要去哪里?

因为语句,a 是要等于(=)2的,因为你按了回车,哈哈

所以呢...........

a会作为一个标签,跟这个对象(圆圆的东西)挂钩。(房间建好了,可以拿钥匙住进去啦)

------------------------------------------------

卧槽,老王在隔壁也买了房子!?!? 这时,又创建了一个对象(圆圆的东西)

b = 3

老王拿着钥匙住进去了,b作为标签就绑在了新建的对象上。

最后再说几点:

可以看到每次创建对象(圆圆的东西),它们的ID都是不同的。

然鹅..........如果我们把 b = 3 改成 b =2, 咦?我们不是已经有了a = 2了吗?说好的自扫门前雪呢??

这就意味着隔壁老王的魔爪要伸过来了.....

当改成 b = 2, integer class不会重新创造一个对象。而是把 b(隔壁老王)作为标签,绑在之前已经创建的那个(a = 2)的对象上。(请看下图)

最后再说俩句:在Python中,对于 a = 2 而言,不要认为是把数值2放进a的篮子里!!!!

应该是a作为标签,挂在对象(数值为2)上!!!!对象很重要!!!!就是图中那个圆圆的东西!!!!!!对象很重要!!!!

到此为止,仅仅是开了头。后面还涉及到很多关于类和对象的操作,并且每个对象里面的那个ID也很重要(涉及到method的引用,还有self的问题)

但是一旦你有了这个思路之后,编写面向对象程序的时候,简直是爽,例如:

好了,先到这里,谢