issubclass&isinstance

issubclass

用于判断一个类是否是一个已知类或是该已知类的子类。注意,该方法只能判断类不能判断实例化对象。

class A:
pass class B(A):
pass class C:
pass D=A print(issubclass(A, A))
print(issubclass(B, A))
print(issubclass(C, A))
print(issubclass(D, A))

isinstance

用于判断一个实例是否是一个已知类或子类的实例。

class A:
pass class B(A):
pass class C:
pass a = A()
b = B()
c = C() print(isinstance(a, A))
print(isinstance(b, A))
print(isinstance(c, A))

我们还可以使用 isinstance 来判断变量类型,原理是:每次赋值操作其实就是对应类型的一次实例化。

s = "s"
i = 1
f = 1.234
l = [1, 2]
t = (1, 3)
d = {"a": 1}
b = True print(isinstance(s, str)) # 判断变量是否是字符串类型
print(isinstance(f, float)) # 判断变量是否是浮点型类型
print(isinstance(i, int)) # 判断变量是否是整数类型
print(isinstance(l, list)) # 判断变量是否是列表类型
print(isinstance(t, tuple)) # 判断变量是否是元组类型
print(isinstance(d, dict)) # 判断变量是否是字段类型
print(isinstance(b, bool)) # 判断变量是否是布尔类型

types&inspect内置模块

types模块

上面介绍了 isinstance 可判断变量类型,那能否判断变量是类、方法或函数呢?答案肯定是能,只是需要用到 types 内置模块

import types

class A:
def f(self):
pass @classmethod
def c(cls):
pass def B():
pass print(isinstance(A, types.ClassType))
print(isinstance(A.f, types.MethodType))
print(isinstance(A.c, types.MethodType))
print(isinstance(B, types.FunctionType))

在用types.ClassType判断变量是否是类,这里有个小坑,当判断一个继承了Object的类时,会返回False。

import types

class A:
pass class B(object):
pass print(isinstance(A, types.ClassType))
print(isinstance(B, types.ClassType))

通过type方法查看两个类

class A:
pass class B(object):
pass print(type(A))
print(type(B))

可以看到虽然我们都叫类,但是对python而言却属于不同的类型

所以,继承了object的类再用 types.ClassType就会判断为False,对于这种类我们需要用types.TypeType来判断。

import types

class A:
pass class B(object):
pass print(isinstance(A, types.TypeType))
print(isinstance(B, types.TypeType))

综上,如果我们要判断一个类就要考虑两种情况。

import types

class A:
pass class B(object):
pass print(isinstance(A, (types.ClassType, types.TypeType)))
print(isinstance(B, (types.ClassType, types.TypeType)))

inspect模块

对于类、方法或函数的判断,还可以使用 inspect 内置模块

import inspect

class A:
pass class B(object): def b(self):
pass def C():
pass print(inspect.isclass(A))
print(inspect.isclass(B))
print(inspect.ismethod(B.b))
print(inspect.isfunction(C))

Python_issubclass&isinstance方法和types&inspect内置模块的更多相关文章

  1. $.on()方法和addEventListener改变this指向

    jQuery $.on()方法和addEventListener改变this指向 标签(空格分隔): jQuery JavaScript jQuery $.on() jq的绑定事件使用$([selec ...

  2. ASP.NET Core 中文文档 第二章 指南(4.10)检查自动生成的Detail方法和Delete方法

    原文 Examining the Details and Delete methods 作者 Rick Anderson 翻译 谢炀(Kiler) 校对 许登洋(Seay).姚阿勇(Mr.Yao) 打 ...

  3. Spark Rdd coalesce()方法和repartition()方法

    在Spark的Rdd中,Rdd是分区的. 有时候需要重新设置Rdd的分区数量,比如Rdd的分区中,Rdd分区比较多,但是每个Rdd的数据量比较小,需要设置一个比较合理的分区.或者需要把Rdd的分区数量 ...

  4. ThinkPHP的D方法和M方法的区别

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

  5. 精益化设计:把敏捷方法和Lean UX相结合

    敏捷方法已经成为了主流.同时,Kindle和iPhone等设备取得的巨大成功也推动了体验设计的飞速发展.不过,如何把敏捷方法和UX设计结合起来,一直以来都是一个难题.文章将探讨如何把UX融入到最流行的 ...

  6. Hibernate中evict方法和clear方法说明

    Hibernate中evict方法和clear方法说明 先创建一个对象,然后调用session.save方法,然后调用evict方法把该对象清除出缓存,最后提交事务.结果报错: Exception i ...

  7. Android HTTP实例 使用GET方法和POST方法发送请求

    Android HTTP实例 使用GET方法和POST方法发送请求 Web程序:使用GET和POST方法发送请求 首先利用MyEclispe+Tomcat写好一个Web程序,实现的功能就是提交用户信息 ...

  8. virtual方法和abstract方法

    在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别.二者都牵涉到在派生类中与override的配合使用. 一.Virtual方法(虚方法) virtual ...

  9. Java提高篇——equals()方法和“==”运算符

    equals() 超类Object中有这个equals()方法,该方法主要用于比较两个对象是否相等.该方法的源码如下: public boolean equals(Object obj) { retu ...

随机推荐

  1. sqlserver 各种判断是否存在(表、视图、函数、存储过程等)

    1.判断表是否存在 select * from sysobjects where id = object_id(表名) and OBJECTPROPERTY(id, N'IsUserTable') = ...

  2. 莫烦python教程学习笔记——使用鸢尾花数据集

    # View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...

  3. Sentry 监控 - 私有 Docker Compose 部署与故障排除详解

    内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...

  4. tableau添加参考线

    一.将数据窗口切换至分析窗口-点击自定义-参考线 二.出现编辑参考线和参考区间的界面(整个表指的是整个视图,每区指的是如下2018就是一个区,每单元格指的是横轴的最小值) 三.我们分别为每区添加最大值 ...

  5. MySQL查询数据库表空间大小

    一.查询所有数据库占用空间大小 SELECT TABLE_SCHEMA, CONCAT( TRUNCATE(SUM(data_length) / 1024 / 1024, 2), ' MB' ) AS ...

  6. [BUUCTF]REVERSE——[GWCTF 2019]pyre

    [GWCTF 2019]pyre 附件 步骤: 1.附件是pyc文件,用python打不开,百度后得知用python反编译工具打开,分享一个python反编译在线网站 反编译后是这段代码 #!/usr ...

  7. 周期性任务(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 话说录入任务信息是件体力活,每个任务都是要一个字一个字码出来滴.要说一个项目文件,任务内容是主体,所以这作为体力活也不冤枉 ...

  8. 实时&离线皮肤渲染技术(Real-time&Offline Skin Rendering)

    目录 现实皮肤模型 BSSRDF 渲染模型 [2001] Diffusion Profile(扩散剖面)[2001] 偶极子 [2002] 高斯和 [2007] Burley Normalized D ...

  9. SpringBoot整合logback日志框架

    在resource下创建一个名称为 logback-spring.xml文件 <configuration> <!--日志文件夹存放的名称--> <contextName ...

  10. Linux(Centos)安装maven

    下载maven安装包 官网地址:http://maven.apache.org/download.cgi 也可以使用 https://yvioo.lanzous.com/ivNVrfcs6ja 把文件 ...