标签:引用类型 解释 类型 反射 对象 实例 好的 article 说明
一切皆对象?
学过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
标签:引用类型 解释 类型 反射 对象 实例 好的 article 说明
原文地址:https://www.cnblogs.com/zhjblogs/p/14767421.html