Python对象(Object)与类型(Type)的关系

Object与Type

    • 1、Object与Type概述
    • 2、Object与Type的关系


1、Object与Type概述


对象(Object)和类型(Type)是Python中两个最最基本的概念,它们是构筑Python语言大厦的基石

所有的数据类型,值,变量,函数,类,实例等一切可操作的基本单元在Python中都是对象(Object),每个对象都有三个基本属性:ID、类型和值

a = 1
print(id(a), type(a), a)    # 1958094307568 <class 'int'> 1

id()内建方法获取对象的唯一编号,它是一个整数,通常就是对象的内存地址。type()内置方法获取对象的类型(Type)

一个对象可能有一个或多个基类(Bases),当一个对象表示数据类型时,比如int对象,它就具有了__bases__属性

print(int.__bases__)    # (<class 'object'>,)

type和bases定义了该对象与其他对象间的关系,实际上对象内的type和bases均指向其他对象,是对其他对象的地址引用

一个对象必有Type属性,同样Type是不能脱离开对象存在的

type()内置方法获取对象的类型。我们也可以使用对象.__class__来获取对象的类型,它们是等价的

print(type(a))        # <class 'int'>
print(a.__class__)    # <class 'int'>

Class和Type均是指类型(Type),Class通常用于普通用户使用class自定义的类型。Type通常指Python的解释器CPython内置的类型

CPython提供内置方法type()而没有定义class(),因为它们本质是一样的,只是不同的语境产生的不同说法

2、Object与Type的关系


Python中的对象之间存在两种关系:

  • 1)父子关系或继承关系(Subclass-Superclass或Object-Oriented),如“猫”类继承自“哺乳动物”类,我们说猫是一种哺乳动物。对象的__bases__属性记录这种关系,可以使用issubclass()判断
  • 2)类型实例关系(Type-Instance),如“米老鼠是一只老鼠”,这里的米老鼠不再是抽象的类型,而是实实在在的一只老鼠。对象的__class__属性记录这种关系,可以使用isinstance()判断

Python把对象分为两类:类型对象(Type)和非类型对象(Non-type)

  • 1)int、type、list等均是类型对象,可以被继承,也可以被实例化
  • 2)1、[1]等均是非类型对象,它们不可再被继承和实例化,对象间可以根据所属类型进行各类操作,比如算数运算

object和type是CPython解释器内建对象,它们的地位非常特殊,是Python语言的顶层元素:

  • 1)object是所有其他对象的基类,object自身没有基类,它的数据类型被定义为type
  • 2)type继承了object,所有类型对象都是它的实例,包括它自身。判断一个对象是否为类型对象,就看它是否是type的实例

在这里插入图片描述

其中,实线表示继承关系,虚线表示实例关系

isinstance()内置方法本质是在判断对象的数据类型,它会向基类回溯,直至回溯到object

print(isinstance(object, type))      # True
print(isinstance(type, object))      # True
print(isinstance(type, type))        # True
print(isinstance(object, object))    # True
print(object.__class__)              # <class 'type'>
print(type.__class__)                # <class 'type'>

Python中还定义了一些常量,比如True、False。其中有两个常量None和NotImplemented比较特殊,通过type()可以获取它们的类型为NoneType和NotImplementedType,这两个类型不对外开放,即普通用户无法继承它们,它们只存在于CPython解释器中

print(type(None))                    # <class 'NoneType'>
print(type(NotImplemented))          # <class 'NotImplementedType'>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/124354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录Day40-单调栈:力扣第496e、503m、42h、84h题

496e. 下一个更大元素 I 题目链接 代码随想录文章讲解链接 方法一&#xff1a;单调栈哈希表 用时&#xff1a;13m52s 思路 维护一个栈底到栈顶是单调递减的栈&#xff0c;从后往前遍历数组nums2&#xff0c;更新栈。nums2当前元素nums2[i]的下一个更大元素就是栈顶元素&am…

【网络安全 --- 文件上传靶场练习】文件上传靶场安装以及1-5关闯关思路及技巧,源码分析

一&#xff0c;前期准备环境和工具 1&#xff0c;vmware 16.0安装 若已安装&#xff0c;请忽略 【网络安全 --- 工具安装】VMware 16.0 详细安装过程&#xff08;提供资源&#xff09;-CSDN博客文章浏览阅读186次&#xff0c;点赞9次&#xff0c;收藏2次。【网络安全 --- 工…

Kubernetes - Ingress HTTP 升级 HTTPS 配置解决方案(新版本v1.21+)

之前我们讲解过 Kubernetes - Ingress HTTP 搭建解决方案&#xff0c;并分别提供了旧版本和新版本。如果连 HTTP 都没搞明白的可以先去过一下这两篇 Kubernetes - Ingress HTTP 负载搭建部署解决方案_放羊的牧码的博客-CSDN博客Kubernetes - Ingress HTTP 负载搭建部署解决方案…

【Go入门】GO流程与函数介绍(代码运行逻辑控制)

流程和函数 这小节我们要介绍Go里面的流程控制以及函数操作。 流程控制 流程控制在编程语言中是最伟大的发明了&#xff0c;因为有了它&#xff0c;你可以通过很简单的流程描述来表达很复杂的逻辑。Go中流程控制分三大类&#xff1a;条件判断&#xff0c;循环控制和无条件跳…

Mac/Linux类虚拟机_CrossOver虚拟机CrossOver 23.6正式发布2024全新功能解析

CodeWeivers 公司于今年 10 月发布了 CrossOver 23.6 测试版&#xff0c;重点添加了对 DirectX 12 支持&#xff0c;从而在 Mac 上更好地模拟运行 Windows 游戏。 该公司今天发布新闻稿&#xff0c;表示正式发布 CrossOver 23 稳定版&#xff0c;在诸多新增功能中&#xff0c;最…

Mybatis-Plus通用枚举功能 [MyBatis-Plus系列] - 第493篇

历史文章&#xff08;文章累计490&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 S…

GB/T 24718-2023 防眩板检测

防眩板是为解决对向车灯眩光&#xff0c;生产制造的安装在高速公路中央分隔带上的一种交通安全产品&#xff0c;多设置于高速公路中央分隔带护栏上或护栏中间&#xff0c;也有一些设置在中央开口活动护栏上&#xff0c;从材质上分钢制防眩板、塑料防眩板、玻璃钢防眩板。 GB/T…

NOIP2023模拟6联测27 点餐

题目大意 有 n n n样菜品&#xff0c;每样菜品都有两个权值 a i a_i ai​和 b i b_i bi​&#xff0c;如果你选择了 k k k个菜品&#xff0c;分别为 p 1 , … , p k p_1,\dots,p_k p1​,…,pk​&#xff0c;则你的花费为 ∑ i 1 k a p i max ⁡ i 1 k b p i \sum\limits_{i…

3D LUT 滤镜 shader 源码分析

最近在做滤镜相关的渲染学习&#xff0c;目前大部分 LUT 滤镜代码实现都是参考由 GPUImage 提供的 LookupFilter 的逻辑&#xff0c;整个代码实现不多。参考网上的博文也有各种解释&#xff0c;参考了大量博文之后终于理解了&#xff0c;所以自己重新整理了一份&#xff0c;方便…

【无标题】Linux VMware安装centos之后设置静态IP

查看本地IP&#xff1a;ip addr;修改启动协议BOOTPROTOstatic&#xff1b;手动配置IP地址&#xff1b;vi /etc/sysconfig/network-scripts/ifcfg-ens33在最下面增加如下配置 # IP地址 &#xff08;根据自己的环境修改&#xff09; IPADDR192.168.8.101 # 子网掩码 NETMASK255.…

JMeter的使用——傻瓜式学习【中】

目录 前言 1、JMeter参数化 1.1、什么是参数化 1.2、用户定义的变量 1.2.1、什么时候使用用户定义的变量 1.2.2、使用“用户定义的变量”进行参数化的步骤&#xff1a; 1.2.3、案例 1.3、用户参数 1.3.1、什么时候使用用户参数&#xff1f; 1.3.2、使用“用户参数”进…

C现代方法(第15章)笔记——编写大型程序

文章目录 第15章 编写大型程序15.1 源文件15.2 头文件15.2.1 #include指令15.2.2 共享宏定义和类型定义15.2.3 共享函数原型15.2.4 共享变量声明15.2.5 嵌套包含15.2.6 保护头文件15.2.7 头文件中的#error指令 15.3 把程序划分成多个文件15.4 构建多文件程序15.4.1 makefile15.…

10、设置视图组件的Head页面头部标签信息

export default {name: "IndexPage",head() {return {title: "中华小英雄电影第二部",bodyAttrs: {style: "background-color: red;",},meta: [// hid覆盖同名的meta信息{ hid: "description", name: "这是一个关于上学励志教育故…

JSON和Protobuf序列化

文章目录 一、粘包和拆包1、半包问题2、半包现象原理 二、JSON协议通信1、通用类库2、JSON传输的编码器和解码器 三、Protobuf协议通信1、一个简单的proto文件的实践案例2、生成POJO和Builder3、消息POJO和Builder的使用案例1&#xff09;构造POJO消息对象2&#xff09;序列化和…

LeetCode 面试题 16.06. 最小差

文章目录 一、题目二、C# 题解 一、题目 给定两个整数数组 a 和 b&#xff0c;计算具有最小差绝对值的一对数值&#xff08;每个数组中取一个值&#xff09;&#xff0c;并返回该对数值的差 示例&#xff1a; 输入&#xff1a;{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8} 输出&…

基于时间的一次性密码 TOTP 详解

什么是基于时间的一次性密码 TOTP ? 基于时间的一次性密码 TOTP&#xff08;Time-Based One-Time Password&#xff09;&#xff0c;也被称为时间同步动态密码&#xff0c;是一种基于时间的一次性密码算法&#xff0c;通常用于两步验证和多因素身份验证&#xff0c;用于增强静…

【CSDN 每日一练 ★★☆】【二叉树/BSF】二叉树的层序遍历

【CSDN 每日一练 ★★☆】【二叉树/BSF】二叉树的层序遍历 二叉树 BSF 题目 给你一个二叉树&#xff0c;请你返回其按 层序遍历 得到的节点值。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例&#xff1a; 二叉树&#xff1a;[3,9,20,null,nul…

Android Studio Giraffe 添加 maven { url “https://jitpack.io“ }报错

Android Studio Giraffe 添加 maven { url “https://jitpack.io” }报错 settings.gradle.kts:13:21: Unexpected tokens (use ; to separate expressions on the same line)解决方法 新版maven写法发生了改变&#xff1a; maven { url uri("https://jitpack.io"…

VScode 调试 linux内核

VScode 调试 linux内核 这里调试的 linux 内核是通过 LinuxSD卡(rootfs)运行的内核 gdb 命令行调试 编辑 /home/tyustli/.gdbinit 文件&#xff0c;参考 【GDB】 .gdbinit 文件 set auto-load safe-path /home/tyustli/code/open_source/kernel/linux-6.5.7/.gdbinit在 lin…

PFAF-Net

I 1 _1 1​和I 2 _2 2​是多模态图像&#xff0c;I F _F F​是融合图像。FT 1 _1 1​是基于空间注意力的融合&#xff0c;FT 2 _2 2​是基于通道注意力的融合 作者未提供代码