一切皆对象?

学过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

python中一切皆对象的理解的更多相关文章

  1. 【Python核心编程笔记】一、Python中一切皆对象

    Python中一切皆对象 本章节首先对比静态语言以及动态语言,然后介绍 python 中最底层也是面向对象最重要的几个概念-object.type和class之间的关系,以此来引出在python如何做 ...

  2. gj2 python中一切皆对象

    2.1 python中一切皆是对象 动态语言和静态语言的区别,Python的面向对象更彻底 同时动态语言,代码的灵活性高 没有编译(检查)的过程,错误只有在运行起来后才会发现 函数和类也是对象,属于p ...

  3. 第一篇 Python中一切皆对象

  4. 关于python中一切皆对象和深浅拷贝

  5. 01-python中一切皆对象

    python一切皆对象 Python中一切皆对象,在静态语言中,Java也是面向对象编程,Python要比Java的面向对象编程更加彻底.元类编程以及猴子补丁都是用一切皆对象编程出来的. 1.函数和类 ...

  6. python:一切皆对象

      学过java语言的童鞋都知道,java是一门面向对象语言,其基本思想就是一切皆对象.Python也是一样的,甚至Python将面向对象思想贯彻地更加彻底,因为在Python中,class本身是一个 ...

  7. Python中通过函数对象创建全局变量

    先看下面这段代码,显然无法work. 因为代码试图在TestVariableScope()中引用一个没有被定义的变量a.所以必须报错,如下图-1. 不过如果你将第2行代码注释掉.代码就能跑通了,如图- ...

  8. 《python解释器源码剖析》第4章--python中的list对象

    4.0 序 python中的list对象,底层对应的则是PyListObject.如果你熟悉C++,那么会很容易和C++中的list联系起来.但实际上,这个C++中的list大相径庭,反而和STL中的 ...

  9. 全面了解python中的类,对象,方法,属性

    全面了解python中的类,对象,方法,属性 python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性( ...

随机推荐

  1. idea中maven配置 Unable to import maven project: See logs for details

    Help -> show log in Explorer 1) No implementation for org.apache.maven.model.path.PathTranslator ...

  2. Oracle PSU 简介

    转至:http://blog.itpub.net/30327022/viewspace-2642815/ Oracle RAC创建完毕后,我们通常需要打上最新的PSU,因为里面是包含GI和DB的补丁集 ...

  3. ValueError: not enough values to unpack

    当在同一行为两个变量赋值时,要用分号;而非逗号,隔开

  4. 清华大学ucore操作系统课笔记

    操作系统 清华大学ucore操作系统课笔记 全文思维导图 1. 操作系统概述 1.1 什么是操作系统? 操作系统的定义 没有公认的精确定义 一个控制程序 一个系统软件 控制程序执行过程,防止错误和计算 ...

  5. CSAPP-Lab01 Data Lab 记录

    总览 Problem-int bitXor bitXor - x^y using only ~ and & Example: bitXor(4, 5) = 1 Legal ops: ~ &am ...

  6. Kubernetes系列(一)Pod

    作者: LemonNan 原文地址: https://juejin.im/post/6862733649272537102 简单介绍 Pod 在 kubernetes 中是一个非常重要的基本概念, 别 ...

  7. [源码解析] TensorFlow 分布式环境(1) --- 总体架构

    [源码解析] TensorFlow 分布式环境(1) --- 总体架构 目录 [源码解析] TensorFlow 分布式环境(1) --- 总体架构 1. 总体架构 1.1 集群角度 1.1.1 概念 ...

  8. Spring RedisTemplate批量插入

    1. 循环请求 最容易想到也是最耗时的操作,不推荐使用.简单样例如下 @Service public class RedisService { @Resource private RedisTempl ...

  9. SourceTree代码变更和FoxMail邮件管理(效率小计俩)

    代码变更溯源 工作时,我们经常会想要查看一个类文件的变更历史,最常见的场景是:"卧槽,谁改了我的代码" 新版本的Xcode溯源自我感觉相当难用,所以这里我们介绍一个工具 Sourc ...

  10. ASP.NET Core 6框架揭秘实例演示[26]:跟踪应用接收的每一次请求

    很多人可能对ASP.NET Core框架自身记录的诊断日志并不关心,其实这些日志对纠错排错和性能监控提供了很有用的信息.如果需要创建一个APM(Application Performance Mana ...