写点什么

Python|类与对象

作者:AXYZdong
  • 2022 年 7 月 15 日
  • 本文字数:2004 字

    阅读完需:约 7 分钟

Python|类与对象

Author:AXYZdong

自动化专业 工科男

有一点思考,有一点想法,有一点理性!

定个小小目标,努力成为习惯!在最美的年华遇见更好的自己!

更多精彩文章前往:👉 个人主页

前言

本文为面向对象在 Python 中的实践,所使用的 环境为 Python3.7


参考视频:https://www.bilibili.com/video/BV1A4411v7b2


本文主要是对视频内容的整理与自我总结和体会。

什么是对象(object)?

"把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。"

——比较正式的说法


更通俗易懂的说法,下面这段内容来自于知乎。


一句话说明什么是面向对象?你个土鳖,你们全家都是土鳖!


好像有人说过这样的话,当头棒喝的方式虽然情感上不易接受,但记忆效果十分显著。


好吧,如果你觉得“土鳖”实在难听也不能准确定位你的档次,你可以自行将其替换为“土豪”,whatever。


面向对象思想有三大要素:封装、继承和多态。


  • 封装:不管你是土鳖还是土豪,不管你中午吃的是窝头还是鲍鱼,你的下水都在你肚皮里,别人看不到你中午吃了啥,除非你自己说给他们听(或者画给他们看,whatever);

  • 继承:刚说了,你个土鳖/豪,你们全家都是土鳖/豪。冰冻三尺非一日之寒,你有今天,必定可以从你爸爸爷爷那里追根溯源。正所谓虎父无犬子,正恩同学那么狠,他爹正日就不是什么善茬,更甭说他爷爷日成,明白了吗?

  • 多态:哲学家说过,世上不会有两个一模一样的双胞胎。即使你从你父亲那里继承来的土鳖/豪气质,也不可能完全是从一个模子里刻出来的,总会有些差别。比如你爸喜欢蹲在门前吃面,你喜欢骑在村口的歪脖子树上吃,或者反过来。当然,也可能令尊爱吃龙虾鲍鱼时旁边有几个艺校小女生喝酒唱歌助兴,你可能更喜欢弄个街舞乐队来吹拉弹唱。


作者:成心文链接:https://www.zhihu.com/question/19854505/answer/21143952 来源:知乎


万物皆对象,对象是具体的事物。


  • 具有属性

  • 具有行为(方法)

  • 把很多零散的东西,封装成一个整体


也就是说一个对象具有静态特征(属性)和动态特征(行为)。


举例:


比如有个叫王二小的人,他有属性和行为。


他的属性


  • 姓名

  • 年龄

  • 身高

  • 体重

  • ...


他的行为


  • 走路

  • 吃饭

  • 放羊

  • ...


Python 中的体现


Python 是一门彻底的面向对象编程的语言(OOP:Object Oriented Programming)


在其他的语言中一般都包括基本数据类型和对象类型,而在 Python 中将它们统称为对象类型,包括 int、float、bool、list、dictionary...

面向过程和面向对象

总的来说都是一种解决问题的思路,面向对象本身则是对面向过程的封装。


  • 面向过程:在解决问题的时候,关注的是解决问题的每一个的过程(步骤)。

  • 面向对象:在解决问题的时候,关注的是解决问题所需要的对象。


面向过程编程关键在于按照步骤划分,把一个任务分解成具体的每一个步骤。而面向对象编程的关键是按照功能将对象进行划分,找到对象,确定对象属性和行为。


从面向过程过度到面向对象


  1. 列举出一个任务的具体实现步骤

  2. 试图分离这些实现步骤中的功能代码块

  3. 将这些功能代码块,划分到某一个对象中

  4. 根据这个对象以及对应的行为,抽象出对应的类

类(class)

简单的说,类是对象的蓝图和模板,而对象是类的实例。


这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的东西。在面向对象编程的世界中,一切皆为对象,对象都有属性和行为,每个对象都是独一无二的,而且对象一定属于某个类(型)。


当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定义出一个叫做“类”的东西。也就是某个具体对象特征的抽象


类由名称、属性和方法组成,属性和方法是抽象的概念,而根据抽象的类可以产生具体的对象。这些对象才拥有具体的属性和方法。


生活中的类:


  1. 类:汽车。对象:大众、奥迪、马自达...

  2. 类:手机。对象:华为手机、小米手机...

  3. 类:熊类。对象:熊大、熊二...

  4. ...


类和对象的关系


  • 对象的 抽象化 形成类

  • 类的 实例化 形成对象


▲ 类和对象关系

类的定义


>>>class People:       pass>>>print(People)<class '__main__.Name'>
复制代码


  • 类名的首字母需要大写


根据类创建(实例化)对象


>>>class People:       pass>>>print(People)<class '__main__.Name'>>>>one = People()>>>print(one)<__main__.Name object at 0x000001790BF5B8E0>
复制代码


从打印出来的结果可以看到 Name 是一个类,而 one 是一个对象。


▲ 实例化过程的底层内存图


本次的分享就到这里


如果我的文章对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦!

听说 👉 点赞 👈 的人运气不会太差,每一天都会元气满满呦!^ _ ^

码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了👉 关注 👈我哦!

如果以上内容有任何错误或者不准确的地方,欢迎在下面👇留个言。或者你有更好的想法,欢迎一起交流学习~~~


发布于: 2022 年 07 月 15 日阅读数: 36
用户头像

AXYZdong

关注

没有伞的孩子要学会奔跑! 2020.06.01 加入

自动化专业 工科男 有一点思考,有一点想法,有一点理性。 定个小小目标,努力成为习惯。

评论

发布
暂无评论
Python|类与对象_Python_AXYZdong_InfoQ写作社区