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…
面向过程和面向对象
总的来说都是一种解决问题的思路,面向对象本身则是对面向过程的封装。
- 面向过程:在解决问题的时候,关注的是解决问题的每一个的过程(步骤)。
- 面向对象:在解决问题的时候,关注的是解决问题所需要的对象。
面向过程编程关键在于按照步骤划分,把一个任务分解成具体的每一个步骤。而面向对象编程的关键是按照功能将对象进行划分,找到对象,确定对象属性和行为。
从面向过程过度到面向对象
- 列举出一个任务的具体实现步骤
- 试图分离这些实现步骤中的功能代码块
- 将这些功能代码块,划分到某一个对象中
- 根据这个对象以及对应的行为,抽象出对应的类
类(class)
简单的说,类是对象的蓝图和模板,而对象是类的实例。
这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的东西。在面向对象编程的世界中,一切皆为对象,对象都有属性和行为,每个对象都是独一无二的,而且对象一定属于某个类(型)。
当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定义出一个叫做“类”的东西。也就是某个具体对象特征的抽象。
类由名称、属性和方法组成,属性和方法是抽象的概念,而根据抽象的类可以产生具体的对象。这些对象才拥有具体的属性和方法。
生活中的类:
- 类:汽车。对象:大众、奥迪、马自达…
- 类:手机。对象:华为手机、小米手机…
- 类:熊类。对象:熊大、熊二…
- …
类和对象的关系
- 对象的 抽象化 形成类
- 类的 实例化 形成对象
▲ 类和对象关系
类的定义
>>>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
是一个对象。
▲ 实例化过程的底层内存图
本次的分享就到这里
好书不厌百回读,熟读自知其中意。将学习成为习惯,用知识改变命运,用博客见证成长,用行动证明努力。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏”
一键三连哦!
听说 👉 点赞 👈 的人运气不会太差,每一天都会元气满满呦!^ _ ^
**码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了👉关注👈我哦!
如果以上内容有任何错误或者不准确的地方,欢迎在下面👇留个言。或者你有更好的想法,欢迎一起交流学习~~~
- 点赞
- 收藏
- 关注作者
评论(0)