python请简述面向对象的理解_如何最简单、通俗地理解Python的面向对象?

1. 通俗,简单,是不能学会编程语言的

关于面向对象,初学者最感到困惑的莫过于类和对象, 而困惑的根源在于,初学者仍然没有建立起完整的编程概念,仍然喜欢将计算机的概念与通俗易懂的日常事务建立起对应关系,期初,这种方法是有效的,就像初中生学习英语单词时,用中文标注如何发音。但随着学习的深入,这种方法逐渐失效,因为体系逐渐复杂的,概念逐渐增加了,那些理解日常事务的方法,逐渐力不从心,因为日常事务不能建立起那么复杂的概念,即便强行建立起来,也难以自圆其说,有些解释,总是词不达意。

题主希望用通俗的理解python的面向对象,这本身就是个伪命题,因为面向对象是一个专业词汇,就不应该用简单的,通俗的方法来理解它,纵然有人尝试这样来解释,也是徒劳的,因为,你无法用通俗简单的概念,建立起与之对等的知识体系。

2. 请先理解数据

在理解面向对象之前,你得先理解啥是数据。编程,根本上讲,就是在处理数据,不管你是面向对象,还是面向过程,目的只有一个,就是要把数据给处理了,因此,一个有意义的程序,一定是由输入, 数据处理, 输出 这三部分构成。

啥是数据,这东西和数学的关系很大,1, 2, 3,4,5, 小学就学过,在计算机里叫int类型数据,3.1415926 这个小学也学过,叫π, 这种数据在计算机里叫浮点型数据(float)。 真,假,对,错,这种真伪的判定在计算机里叫布尔类型(bool), 你看到的这些文字,在计算机里叫字符串。 到这里,一切都还比较容易理解。可是接下来,就不那么容易了。

我把4, 2, 1, 7, 8这5个数放在一起,我希望有一个东西可以装他们,而且是有序的装他们,我想取某个数的时候,只需要提供编号就行了,比如我提供编号2, 它就给我1, 编号是从0开始的,4的编号是0, 2的编号是2, 1的编号是2, 这个东西就是列表。

我把4, 2, 1, 7, 8, 7, 2 这7个数放在一起,我希望有一个东西可以装他们,放进去以后,它可以帮我去除重复的数值,最后只剩下4, 2, 1, 7, 8, 这个就是集合。

我把 一 1 , 二 2 , 三 3 这三对数据放在一起,我希望有一个东西可以装他们,放进去以后,我给它一, 它就能给我1, 我给它三,它就给我3, 这就是字典。

ok,你大致理解了数据, 我们写代码就是要处理数据的。接下来说说怎么处理数据。

3. 我们需要函数

你想从0到100 找到既能被2整除,又能被3整除的数,那么你可以这样写代码

for i in range(100):

if i % 2== 0 and i % 3 == 0:

print(i)

完美,你写了一段代码,实现了一个功能,这个时候,你的老板要求你,实现一段代码,输出0到1000以内 所有能被4 和7 整除的数, 这个时候,你有两个选择,一个选择是修改上面这段代码,另一个选择是重新再写一段代码

for i in range(1000):

if i % 4== 0 and i % 7 == 0:

print(i)

先来说选择一,你修改了代码,那么从0到100找出能被2和3整除的代码就没有了,被你修改掉了,突然,老板又来找你,写一段找出从0到100既能被2也能被3整除的代码。估计你要被气的吐血了,你刚刚把那段代码修改了啊,难道要再修改回去么?

再来看选择二, 你保留了第一段代码,写了第二段代码,老板让你找100以内能被2和3整除的数,你就执行第一段代码,老板让你找1000以内能被4和7整除的数,你就执行第二段代码,两段代码,你都有啊,你很开心,但是很快,老板让你找出10000以内技能被7 也能被9 整除的代码,别管老板为啥这么要求,他给你发工资,你就的按照要求完成工作,现在,你难道要再写一段类似的代码么? 如果你真的那么写了,你迟早要被累死。

咋办,聪明的人类发明了函数

def haha(num, x, y):

for i in range(num):

if i % 2== 0 and i % 3 == 0:

print(i)

haha(100, 2, 3)

haha(1000, 4, 7)

看见没,你只需要写一个函数,就可以满足老板的所有要求,不用一遍一遍的修改代码。

4. 我们需要封装

如果,你家里只有一本书,你需要买一个书架么?正常的回答都是不需要,因为书太少了,不需要管理。面向对象里的封装,本质上就是在管理。因为函数多了,你得想办法管理他们啊,最简单的办法,按照这些函数的功能进行分类吧。和文件处理相关的放在一起,写在一个脚本里,和时间处理相关的函数放在一起,写在一个脚本里,和网络请求相关的函数放在一起,写在一个脚本里。你可以把他们都放在一个脚本里,但是那样,你想找他们的时候,就困难了,一个脚本里放了几千个函数,几万行代码,请问,让你找一个函数的时候,你觉得方便么?

一个python脚本,就是一个封装,把功能相近的代码放在一起,这样,找起来就容易,用起来就方便。

这和前面讲数据的时候,把数放在一起,出于各种目的设计出列表,字典,集合是相同的道理。

5. 面向对象

进入最关键的阶段了,面向对象,是为了封装而存在的,一个类,就是一份约定,约定了管理哪些数据,哪些函数,也就是所谓的属性和方法。但是,请注意,类只是一份约定,履行这份约定的,是对象。

对象是类创建出来的,请不要把它想象成母鸡下蛋,所谓创建,没有你以为的那个母鸡下蛋的动作,我强调一遍,不要尝试用日常事务的概念来套计算机的概念。列表,字典,集合,都装了数据。对象,不只是装了数据,还装了函数。列表可以很随意的装数据,但是对象不行,对象必须按照类的要求去装数据,去装方法,最起码,类要求对象装的,对象都必须装上,因为,这个对象是类创建出来的,就必须听这个类的话。

尽管我十分不情愿用这种看似通俗易懂的语言来解释面向对象,但我还是尝试了,可写到这里,我实在编不下去了,因为,已经不能从日常事务中找到合适的事物来比喻了,这也回应了我开头的观点,不要用通俗的,简单的方式来理解面向对象,你要用计算机的视角,计算机的语言,计算机的概念来理解它,就写到这里吧,尽力了

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值