深入理解Python的类,实例和type函数

news2025/1/11 12:54:03

问题起源:

class t():
    pass
s1 = t()
s2 = type("Student2",(),{})
isinstance(s1, type), isinstance(s2, type)

为什么第一个是false,第二个是true呢

根因定位:

在Python中,一切皆对象,类是对象,实例也是对象。但它们是不同类型的对象。

  • s1 = t() 这一行代码创建了类t的一个实例,赋值给变量s1。这里,s1是t的一个实例对象,而不是一个类。
  • s2 = type(“Student2”, (), {}) 这一行代码动态创建了一个新类,类名为"Student2",没有父类(()中为空),类体中没有任何属性或方法({}为空字典)。type在这里被用作动态创建类的函数,这个函数返回一个新的类对象。因此,s2是一个类,而不是某个类的实例。

当调用isinstance(object, classinfo)函数时,它会检查object是否是classinfo的实例或者是classinfo的子类的实例。在给定上述情况:

  • isinstance(s1, type) 会返回False,因为s1是t类的一个实例,而不是一个类。在Python中,type是所有新式类的元类,但s1不是一个类,它是类t的实例。
  • isinstance(s2, type) 会返回True,因为s2是使用type函数动态创建的一个类对象。在Python中,所有的类本质上都是type的实例。就像是类是对象的模板一样,type是类的模板。因此,s2是type的一个实例。

结论:

简而言之,第一个表达式是False因为s1是一个类的实例,而不是类本身;第二个表达式是True,因为s2本身是一个由type创建的类。

isinstance本质是判断第一个参数是不是第二个参数的实例

type的对象类,类的对象是实例,type—>class—>instance

可以推断:
isinstance(s1.class, type)为true
实践证明:
在这里插入图片描述

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

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

相关文章

补一 继承的使用

继承的关键词为extends 模型为 public class 子类 extends 父类

C#winfrom三层架构实现简单课程管理系统管理系统,三层架构实现增删改查

1. 项目展示 1.1登录展示 1.2添加课程信息展示 1.3课程信息管理-查询-修改-删除 1.4修改登录密码 2.项目功能介绍(图) 3.数据库设计 3.1 教师表设计 3.2 课程分类表 3.3 课程信息表 4. 创建样式界面 winfrom 超详细UI创建过程 实现双色球选号器UI界面…

ssrf初步

一,简介 全称:Server-Side Request Forgery(中文:服务器端请求伪造) 攻击者从服务端发起请求,让服务器连接任意外部系统,从而泄露敏感数据。主要利用各种协议的请求伪造,例如php协…

Oracle SQL Developer导出数据库表结构,表数据,索引以及序列号等对象

目录 一、业务需求 三、环境说明 三、数据导出 四、数据导入 一、业务需求 通过Oracle SQL Developer软件将指定oralce数据库中的表结构,表数据,索引以及序列号等对象导出成SQL文件。 三、环境说明 数据库版本:Oracle Database 11g Expres…

【C++】STL_ string的使用 + 模拟实现

前言 目录 1. STL简介(1)什么是STL(2)STL的版本(3)STL的六大组件 2. string的使用2.1 npos2.2 遍历字符串string的每一个字符2.3 迭代器:2.4 string的内存管理2.5 string模拟实现2.5.1 深拷贝&a…

MySQL学习笔记10——日志

日志 一、日志1、通用查询日志(1)开启通用查询日志(2)查看通用查询日志(3)删除通用查询日志 2、慢查询日志3、错误日志4、二进制日志(1)查看二进制日志(2)刷新…

创新指南|创新组合管理的7个陷阱以及如何避免它们

进入未知领域的第一步可能具有挑战性。尽管创新会犯错误,但在将 IPM 作为公司实践实施时,您可以准备好并避免一些常见的陷阱。在这篇文章中,我们将讨论组织在实施创新组合管理时遇到的最常见的陷阱。 01. 在映射中包含日常业务任务 映射中的…

工会排队返现:创新促销模式,实现消费者与商家双赢

在数字化营销日益盛行的今天,各种促销策略层出不穷,但真正能够打动消费者内心并促成双赢局面的策略却并不多见。工会排队返现模式便是其中一例,它巧妙地融合了积分奖励、奖金池累积以及排队等待机制,为消费者和商家带来了全新的互…

C++入门--引用

点赞关注不迷路!本节涉及C入门--引用 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 ✨ 加关注👀 期待与你共同进步! 1.1 引用的概念 啥叫引用?其实很好理解,比如你隔壁邻居的孩子上学时大…

【练习3】

1.将二叉搜索树转为排序的双向链表 (好久没看数据结构,忘完了,学习大佬的代码) class Solution { public:Node* prenullptr,*headnullptr; //pre为每次遍历时的前一个节点,head记录头节点Node* treeToDoublyList(Node* root) {if…

PHP单独项目启动演示

文章目录 phpstudy得到文件打开phpStudy.exe运行项目 phpstudy 得到文件 一般我们会得到这么一个项目文件,如果外层有“中文路径”,请剪切此内容作为项目根目录即可 打开phpStudy.exe 因为我又正常的编程环境和mysql,所以这里是正常的&a…

linux数据备份与恢复

目录 前言 1、数据备份和恢复中的两个关键性指标 2、linux系统的定时任务 1)本地定时任务crontab 在实验测试过程中,遇到多次crontab任务不执行问题 ,总结下来主要有几个方面原因: 2)分布式定时任务系统Jenkins 3、备份存储…

TinyEngine 低代码引擎区块局域网部署方案全新上线!

本文由体验技术团队 TinyEngine 项目组成员创作~ 在 TinyEngine 开源后,对私有化部署存在诉求的用户越来越多,而当前 TinyEngine 多项内容都依托在公网中,当前官网提供的区块发布方案,为公网环境下的发布,不能完全满足…

信创基础软件之数据库

一、数据库概述 数据库是一种用于存储和管理拥有固定格式和结构数据的仓库型数据管理系统。其主要用于业务数据的存储和业务逻辑运算,具体负责保障数据的安全性、完整性、多用户对数据的并发使用以及发生故障后的系统恢复。 二、数据库的体系架构 数据库内核:对数…

C语言 函数的嵌套与递归 调用

本文 我们来说函数的嵌套调用和递归调用 在很多大型项目中 我们肯定不可能将所有逻辑都写在一个函数中 肯定要按功能拆解成多个特定的功能函数 函数并不允许嵌套调用,但是 允许在逻辑代码中嵌套调用 所谓函数嵌套调用 就是在一个函数中调用另一个函数,而…

VS编辑器下使用MFC完成研究生管理系统设计

背景: (一)实验目的 通过该实验,使学生掌握windows程序设计的基本方法。掌握学籍管理的基本内容,熟练应用数据库技术和通用组件,实现研究生信息的增、删、改、查功能。通过处理过程对计算机软件系统工作原…

【Linux进程间通信(六)】深入理解 System V IPC

(一)引入 (二)IPC 命名空间 (三)ipc_ips结构体 (四)ipc_id_ary结构体 (五)kern_ipc_perm结构体 (六)操作系统对IPC资源是如何管理…

mybatis:Spring junit 测试报错:Failed to load ApplicationContext

Spring junit 测试报错:Failed to load ApplicationContext 解决方法,修改mybatis版本,版本过高导致无法加载依赖

NVIDIA Omniverse Cloud API支持数字孪生开发,可解决复杂AI问题 | 最新快讯

在全球范围内,价值超过 50 万亿美元的重工业市场,正在竞相实现数字化。 基于此,为帮助数字孪生技术更好地赋能千行百业,AI 企业 NVIDIA 在架构底层算力的同时,也搭建了 NVIDIA AI Enterprise 和 Omniverse 两大平台。 …

PDF转word转ppt软件

下载地址:PDF转word转ppt软件.zip 平时工作生活经常要用到PDF转word转ppt软件,电脑自带的又要开会员啥的很麻烦,现在分享这款软件直接激活就可以免费使用了,超级好用,喜欢的可以下载