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

问题起源:

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
实践证明:
在这里插入图片描述

相关推荐

  1. 深入理解 Python 各种方法

    2024-05-09 07:52:09       9 阅读
  2. python 中我对函数理解

    2024-05-09 07:52:09       30 阅读
  3. 深入理解Python `yield` `yield from`

    2024-05-09 07:52:09       30 阅读
  4. Python中,type() isinstance() 区别

    2024-05-09 07:52:09       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-09 07:52:09       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-09 07:52:09       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-09 07:52:09       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-09 07:52:09       20 阅读

热门阅读

  1. 教学目标的四个维度

    2024-05-09 07:52:09       13 阅读
  2. 传参右值应用的好处

    2024-05-09 07:52:09       12 阅读
  3. 用最简单的示例去理解:Dijkstra最短路径算法

    2024-05-09 07:52:09       11 阅读
  4. Spring Boot应用部署 - Tomcat容器替换为Undertow容器

    2024-05-09 07:52:09       11 阅读
  5. spring boot 核心配置文件是什么?

    2024-05-09 07:52:09       14 阅读
  6. Wireshark Lua插件开发实战:应对TCP粘包问题

    2024-05-09 07:52:09       10 阅读
  7. Linux-笔记 常用命令

    2024-05-09 07:52:09       9 阅读
  8. 数字孪生与虚拟现实结合

    2024-05-09 07:52:09       11 阅读
  9. 基于python+Django的二维码生成算法设计与实现

    2024-05-09 07:52:09       11 阅读
  10. NPM和GitLab

    2024-05-09 07:52:09       12 阅读
  11. 学习Uni-app开发小程序Day5

    2024-05-09 07:52:09       12 阅读