解析Python中的类的方法和概念
链接:https://zhuanlan.zhihu.com/p/26617823
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
一个阴郁的冬天,我在YouTube上搜到一个视频作者John Philip Jones,发现一个关于Python类和对象的讲解。这是目前为止我看到的最利于小白学习Python的讲解方法。由于在国内上YouTube不方便,打算写个文章把内容搬运过来,同时加入一些自己的学习心得,希望可以为像我一样小白中的小白提供这些信息。
版权作者,再次重复三遍:John Philip Jones, John Philip Jones,John Philip Jones
----------------------------------------------------
建议直接FQ观看,如果你不想或者不能FQ,那咱们开始吧:
(提示:结论在最后写出,但是过程非常重要)
首先,我已经假定你已经看了无数遍的垃圾文章,然后依然搞不懂类和对象,但是呢起码知道有类和对象这么两个玩意儿。
由于你没有编程经验,所以无法从学过的编程语言里通过类比去理解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的问题)
但是一旦你有了这个思路之后,编写面向对象程序的时候,简直是爽,例如:
好了,先到这里,谢谢再见
推荐阅读
-
深入解析Android中的Image类(涉及YUV_420_888)
-
Java 8新特性探究(十三)JavaFX 8新特性以及开发2048游戏-JavaFX历史## 跟java在服务器端和web端成绩相比,桌面一直是java的软肋,于是Sun公司在2008年推出JavaFX,弥补桌面软件的缺陷,请看下图JavaFX一路走过来的改进 从上图看出,一开始推出时候,开发者需使用一种名为JavaFX Script的静态的、声明式的编程语言来开发JavaFX应用程序。因为JavaFX Script将会被编译为Java bytecode,程序员可以使用Java代码代替。 JavaFX 2.0之后的版本摒弃了JavaFX Script语言,而作为一个Java API来使用。因此使用JavaFX平台实现的应用程序将直接通过标准Java代码来实现。 JavaFX 2.0 包含非常丰富的 UI 控件、图形和多媒体特性用于简化可视化应用的开发,WebView可直接在应用中嵌入网页;另外 2.0 版本允许使用 FXML 进行 UI 定义,这是一个脚本化基于 XML 的标识语言。 从JDK 7u6开始,JavaFx就与JDK捆绑在一起了,JavaFX团队称,下一个版本将是8.0,目前所有的工作都已经围绕8.0库进行。这是因为JavaFX将捆绑在Java 8中,因此该团队决定跳过几个版本号,迎头赶上Java 8。 ##JavaFx8的新特性 ## ###全新现代主题:Modena 新的Modena主题来替换原来的Caspian主题。不过在Application的start方法中,可以通过setUserAgentStylesheet(STYLESHEET_CASPIAN)来继续使用Caspian主题。 参考http://fxexperience.com/2013/03/modena-theme-update/ ###JavaFX 3D 在JavaFX8中提供了3D图像处理API,包括Shape3D (Box, Cylinder, MeshView, Sphere子类),SubScene, Material, PickResult, LightBase (AmbientLight 和PointLight子类),SceneAntialiasing等。Camera类也得到了更新。从JavaDoc中可以找到更多信息。 ###富文本 强化了富文本的支持 ###TreeTableView ###日期控件DatePicker 增加日期控件 ###用于 CSS 结构的公共 API
-
在Linux中的rootfs、initrd、ramfs和initramfs的解析
-
解析Python中的类的方法和概念
-
通过增强版RFM模型,揭示B站优秀up主的简单方法!(包含数据和实战代码)(中)
-
Python中小顶堆和大顶堆的使用方法
-
堆排序:解析排序算法中的堆排序方法
-
Python中的大顶堆和小顶堆:实现从小到大排序的大顶堆
-
堆排序中 Go 语言中使用大顶堆和小顶堆的方法
-
对Linux系统中的lsmod、lsof、lspci、lsscsi命令和实例进行深入解析