Python面向对象:isinstance和issubclass
一、isinstance与type
在游戏项目中,我们会在每个接口验证客户端传过来的参数类型,如果验证不通过,返回给客户端“参数错误”错误码。
这样做不但便于调试,而且增加健壮性。因为客户端是可以作弊的,不要轻易相信客户端传过来的参数。
验证类型用type函数,非常好用,比如
print(type('foo') == str)
True
print(type(2.3) in (int, float))
True
既然有了type()来判断类型,为什么还有isinstance()呢?
一个明显的区别是在判断子类。
type()不会认为子类是一种父类类型;isinstance()会认为子类是一种父类类型。
千言不如一码。
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Foo(object):passclass Bar(Foo):passprint(type(Foo()) == Foo)
True
print(type(Bar()) == Foo)
False
# isinstance参数为对象和类
print(isinstance(Bar(),Foo))
True
需要注意的是,旧式类跟新式类的type()结果是不一样的。旧式类都是<type ‘instance’>。
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# python2.+
class A:passclass B:passclass C(object):passprint('old style class',type(A())) # old style class <type 'instance'>print('old style class',type(B())) # old style class <type 'instance'>print('new style class',type(C())) # new style class <class '__main__.C'>print(type(A()) == type(B())) # True
注意:不存在说isinstance比type更好。只有哪个更适合需求。
二、issubclass
class Parent:passclass Sub(Parent):passprint(issubclass(Sub, Parent))
True
print(issubclass(Parent, object))
True
Python面向对象:isinstance和issubclass相关推荐
- Python面向对象知识点详解(含__init__、__add__、__str__、issubclass()、isinstance()等方法的使用)
Python面向对象 创建类 类属性与方法 `__init__()` 类的构造函数(初始化方法) 类的继承 方法重写 基础重载方法 `__str__( self )`的使用 运算符重载 `__add_ ...
- issubclass在python中的意思_python基础之类的isinstance与issubclass、反射
一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo: pass o ...
- Python面向对象编程:类继承和其衍生术语
Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...
- python类高级用法_十.python面向对象高级用法
1.反射 1.1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的 ...
- python面向对象编程的三大特性_Python面向对象总结及类与正则表达式详解
Python3 面向对象 -------------------------------------------------------------------------------- 一丶面向对象 ...
- python getattr_来一点Python面向对象第一级进阶的东西
isinstance和issubclass # isinstance(obj,cls) 检查obj是否是类cls的对象class Foo: def __init__(self,name): self. ...
- Python 面向对象之双下方法,内置函数
isinstance和issubclass isinstance(obj,cls) # 检查是否obj是否是类 cls 的对象 class Foo(object):passobj = Foo ...
- python面向对象难学_python-面向对象进阶
一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查obj是否是cls的对象 issubclass(sub,super)检 ...
- python面向对象三大特性_深入理解Python面向对象的三大特性
在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取.操作这些数据的方法所组成的集合.编写代码时,我们可以将所有功能都写在一个文件里,这样也是可行的,但是这样不利于代码的维护,你总不希 ...
- python基础系列教程——python面向对象编程全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 python面向对象编程全解. 面向对象技术简介 一个类占有一个独立的空间,类中的属性叫做类变量,类中的函数,叫做类的方法. 类(Class) ...
最新文章
- 《Microsoft Sql server 2008 Internal》读书笔记--第八章The Query Optimizer(1)
- 【人物】雷军去了联想,干货分享全场哑口无言,除了掌声...
- 可视化分析WEB访问:logstalgia
- day5学python 基础+装饰器内容
- caffe安装 cuda安装 opencv安装 cudnn安装 python相关依赖库安装
- java的编程规范_JAVA编程规范-OOP规范
- JAVASCRIPT实现XML分页
- 搜狗浏览器连接海康摄像头,无法显示画面
- myeclipse6.5安装jrable
- 程序设计c语言答案pdf,C语言程序设计习题解答.pdf
- 思源黑体官方下载地址
- 互联网行业,常见含金量高的证书,看看你有几个?
- 服务器iscsi如何修复,服务器重启后,iSCSI目标卡住了重新连接
- 已下载好的OpenCV4.5.5 CMake .cache文件夹
- 如何找到刑事案件的辩点(律师角度)
- ins图片视频批量下载
- 倡议书格式范文_倡议书的格式及范文
- memcacheredis构建缓存服务器
- 1. Resnet网络详解
- PHP超全局变量之$_GETT和$_POST