python中一切皆对象的理解

一切皆对象?

学过Java都知道,Java中有8个基本类型,其余的都是继承自Object类的引用类型。方法内的基本类型变量会在栈上分配,而引用类型会通过逃逸分析来决定在栈上分配或堆上分配。Java中关于类和对象是针对引用类型而言的。

但在Python中,OO的思想被彻底的实现了——Python中一切皆对象。这样就意味着,不论是int,str,还是dict,list,再或者是自己定义的类,实例化出来都是一个对象。这是Python与Java很大的不同。

然而光是这一点不足以说明“一切皆对象”,为什么这么说?因为Python中函数、类、类型等等也都是对象。我们知道Python是动态类型语言,虽然不用声明类型,但是每个对象都隐藏着一个固定的类型(可以通过type(obj)查看),而这个类型也是一个对象。

这就厉害了,Java的动态特性的实现时基于可以通过反射技术改变内存中类的结构,而Python不必这么复杂,由于类也是一种对象,直接修改对象就可以实现了。

有了下面这张图可能会更好理解:

我们可以从以下三句话来理解上面这幅图。

1“一切皆对象”
不过多解释,上面已经提到过了。

2“一切对象都继承自object,object自己例外”
这个和Java类似,总得有个基类,囊括一些最基本的函数及属性,同时也方便多态的管理。
object不继承自object也好理解,这样的套娃是没有意义的。

3“一切类型都是type类型的实例,没有例外”
type本身是类型也是对象,和其他的int list str之类的并无太大区别。所以就不难理解,type也是type类型的实例。
除了这个以外还有一个环形关系,那就是type是object的子类,同时object也是type的实例。

说好的禁止套娃呢。不过Python凭借着这样的对象模型设计真正实现了一切皆对象的OO思想。就是这么简单粗暴,所以人生苦短我用Python。



原文链接:https://blog.csdn.net/qq_23845067/article/details/105962773

 

posted @ 2021-05-14 10:14  北极星!  阅读(367)  评论(0编辑  收藏  举报