前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中万物皆对象实现机制(进阶必看)

python中万物皆对象实现机制(进阶必看)

作者头像
make a bug
发布2022-09-20 11:00:01
3310
发布2022-09-20 11:00:01
举报
文章被收录于专栏:我和bug只能活一个

yancyyu

大道至简,我用python

python进阶

问题

为啥说python的面对对象更加彻底?

对象这个词想必大家都很熟悉,但是在实际的编程中,面向对象编程指的是一种编程思想,它更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象。那么问题来了,那么为什么大家都说python是更加彻底的面对对象呢,它到底彻底在哪里?

它与其他编程语言的不同

在python中,函数和类也是对象,属于python的一等公民。这些一等公民也就是对象具有以下几个特性:

  1. 可以赋值给一个变量
  2. 可以添加到集合对象中
  3. 可以作为参数传递给函数
  4. 可以当做函数的返回值

实现原理

静态语言中将类加载到内存中运行的时候,类是不可修改的,因为已经编译完成。python为动态语言,全面向对象编程:所有得类都是type的实例,除object来其他类都继承object类,都是可以修改的。

魔法函数

1

魔法函数贯穿了python的面对对象实现机制。

一个魔法函数的栗子

魔法函数的效率

这里用__len__函数来举例

len魔法函数,python内置类型(int list dict)底层均为c语言写的,需要用cython解释器去执行,所以长度在一开始分配内存空间的时候就已经确定了,而不是去遍历,所以用魔法函数的len的效率高。

鸭子类型和多态

2

鸭子类型和多态

python是基于鸭子类型设计的,鸭子类型算是一种协议。鸭子类型是一种特点的描述方式,鸭子类型就是多态成立的前提,这个类型与静态语言不同的是,不需要很严格的规范,在一开始就确定类的数据结构类型。而是我有这个方法,那么我就具有某一个同样有这个方法的数据类型的特性,而数据类型的特性是根据魔法函数来实现的,决定了该class可以如何被使用。

总结

/ 2022.5.3

  1. 在python中,面对对象是用魔法函数的机制实现的,它给我们编程带来了极大的灵活性。
  2. 在其他静态语言中,我要实现多态,我需要定义一个抽象类(接口),然后继承这个类。而python中,我不需要继承任何类,只需要写方法即可,类名不重要。
  3. python中没有多态的意思是,其实这个概念在python中可以不存在,在java这种静态语言中 一个类在实例化的时候才能知道具体是实现什么子类的情况下,我们最开始将这个类指向其父类,等到具体的时候再指向实际的子类,这种情况下叫多态,但是python是动态语言,在任何都是都可以改变其指向的类型。天然就是多态,所以多态这个概念是大家强行将静态语言的概念拿到动态语言中来理解的概念。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI懒人星球 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档