Python面向对象丨类与对象

举报
AXYZdong 发表于 2022/02/27 15:47:36 2022/02/27
【摘要】 Author:AXYZdong 自动化专业 工科男有一点思考,有一点想法,有一点理性!定个小小目标,努力成为习惯!在最美的年华遇见更好的自己! 前言 什么是对象(object)? 面向过程和面向对象 类(class) 前言本文为面向对象在Python中的实践,所使用的 环境为Python3.7。

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. 类:熊类。对象:熊大、熊二…

类和对象的关系

  • 对象的 抽象化 形成类
  • 类的 实例化 形成对象

▲ 类和对象关系

类的定义

>>>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 是一个对象。

在这里插入图片描述

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


  本次的分享就到这里


11

好书不厌百回读,熟读自知其中意。将学习成为习惯,用知识改变命运,用博客见证成长,用行动证明努力。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
听说 👉 点赞 👈 的人运气不会太差,每一天都会元气满满呦!^ _ ^
**码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了👉关注👈我哦!


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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。