Python_issubclass&isinstance方法和types&inspect内置模块
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内置模块的更多相关文章
- $.on()方法和addEventListener改变this指向
jQuery $.on()方法和addEventListener改变this指向 标签(空格分隔): jQuery JavaScript jQuery $.on() jq的绑定事件使用$([selec ...
- ASP.NET Core 中文文档 第二章 指南(4.10)检查自动生成的Detail方法和Delete方法
原文 Examining the Details and Delete methods 作者 Rick Anderson 翻译 谢炀(Kiler) 校对 许登洋(Seay).姚阿勇(Mr.Yao) 打 ...
- Spark Rdd coalesce()方法和repartition()方法
在Spark的Rdd中,Rdd是分区的. 有时候需要重新设置Rdd的分区数量,比如Rdd的分区中,Rdd分区比较多,但是每个Rdd的数据量比较小,需要设置一个比较合理的分区.或者需要把Rdd的分区数量 ...
- ThinkPHP的D方法和M方法的区别
M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...
- 精益化设计:把敏捷方法和Lean UX相结合
敏捷方法已经成为了主流.同时,Kindle和iPhone等设备取得的巨大成功也推动了体验设计的飞速发展.不过,如何把敏捷方法和UX设计结合起来,一直以来都是一个难题.文章将探讨如何把UX融入到最流行的 ...
- Hibernate中evict方法和clear方法说明
Hibernate中evict方法和clear方法说明 先创建一个对象,然后调用session.save方法,然后调用evict方法把该对象清除出缓存,最后提交事务.结果报错: Exception i ...
- Android HTTP实例 使用GET方法和POST方法发送请求
Android HTTP实例 使用GET方法和POST方法发送请求 Web程序:使用GET和POST方法发送请求 首先利用MyEclispe+Tomcat写好一个Web程序,实现的功能就是提交用户信息 ...
- virtual方法和abstract方法
在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别.二者都牵涉到在派生类中与override的配合使用. 一.Virtual方法(虚方法) virtual ...
- Java提高篇——equals()方法和“==”运算符
equals() 超类Object中有这个equals()方法,该方法主要用于比较两个对象是否相等.该方法的源码如下: public boolean equals(Object obj) { retu ...
随机推荐
- shell条件测试语句实例-测试apache是否开启
终于理解了shell条件测试语句"!="和"-n"的用法区别,于是有了如下的shell脚本,做为练习. 第一种方法:测试apache是否开启?字符串测试 #!/ ...
- redis迁移工具redis-migrate-tool
目录 一.简介 二.测试 三.安装 四.验证 一.简介 redis-migrate-tool是在redis之间迁移数据的一个方便且有用的工具.他会已服务方式不断同步两边的数据.等到合适时间,中断red ...
- Pytorch入门下 —— 其他
本节内容参照小土堆的pytorch入门视频教程. 现有模型使用和修改 pytorch框架提供了很多现有模型,其中torchvision.models包中有很多关于视觉(图像)领域的模型,如下图: 下面 ...
- xmake v2.6.2 发布,新增 Linux 内核驱动模块构建支持
Xmake 是一个基于 Lua 的轻量级跨平台构建工具. 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时. 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLis ...
- 记一次 .NET 某市附属医院 Web程序 偶发性CPU爆高分析
一:背景 1. 讲故事 这个月初,一位朋友加微信求助他的程序出现了 CPU 偶发性爆高,希望能有偿解决一下. 从描述看,这个问题应该困扰了很久,还是医院的朋友给力,开门就是 100块 红包 ,那既然是 ...
- 5、双指针技巧套路框架——Go语言版
前情提示:Go语言学习者.本文参考https://labuladong.gitee.io/algo,代码自己参考抒写,若有不妥之处,感谢指正 关于golang算法文章,为了便于下载和整理,都已开源放在 ...
- 7.2 Tornado异步
7.2 Tornado异步 因为epoll主要是用来解决网络IO的并发问题,所以Tornado的异步编程也主要体现在网络IO的异步上,即异步Web请求. 1. tornado.httpclient.A ...
- JAVA微信公众号网页开发——生成自定义微信菜单(携带参数)
官网接口地址:https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.ht ...
- 【LeetCode】839. 相似字符串组 Similar String Groups (Python)
作者: 负雪明烛 id: fuxuemingzhu 公众号:每日算法题 本文关键词:LeetCode,力扣,算法,算法题,字符串,并查集,刷题群 目录 题目描述 解题思路 并查集 代码 刷题心得 欢迎 ...
- 【九度OJ】题目1144:Freckles 解题报告
[九度OJ]题目1144:Freckles 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1144 题目描述: In an ...