python 判断变量类型中为什么推荐使用isinstance来进行类型判断

Python中请使用isinstance()判断变量类型
(window.slotbydup=window.slotbydup || []).push({
id: '2611110',
container: s,
size: '240,200',
display: 'inlay-fix'
您当前位置: &
[ 所属分类
作者 红领巾 ]
一、isinstance()在中可以使用type()与isinstance()这两个函数判断对象类型,而isinstance()函数的使用上比type更加方便。复制代码 代码如下:# coding=utf-8&a = 10&def b():&&& pass&print isinstance(a,(int,str))print isinstance(a,(float,str))print isinstance(b,(str,int))&class c:&&& pass&obj = c()&print isinstance(obj,(c,int))执行结果:复制代码 代码如下: TrueFalseFalseTrue二、isinstance 和 type的区别isinstance 和 type的区别在于:复制代码 代码如下:class A:&&& passclass B(A):&&& passisinstance(A(), A)& # returns Truetype(A()) == A&&&&& # returns Trueisinstance(B(), A)&&& # returns Truetype(B()) == A&&&&&&& # returns False区别就是 对于subclass之类的 type就不行了,所以,强烈建议不要使用type判断对象类型。
本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程
转载请注明本文标题:本站链接:
分享请点击:
1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
CodeSecTeam微信公众号
当你的才华还撑不起你的野心时,那你就应该静下心来学习。当你的经济还撑不起你的梦想时,那你就应该踏实的去工作!
手机客户端
,专注代码审计及安全周边编程,转载请注明出处:http://www.codesec.net
转载文章如有侵权,请邮件 admin[at]codesec.netPython中为什么推荐使用isinstance来进行类型判断?而不是type - 网名还没想好 - 博客园
posts - 363, comments - 47, trackbacks - 0, articles - 2
转自:/blog//python-type-vs-isinstance.html
Python在定义变量的时候不用指明具体的的类型,解释器会在运行的时候会自动检查 变量的类型,并根据需要进行隐式的类型转化。因为Python是动态语言,所以一般情 况下是不推荐进行类型转化的。比如"+"操作时,如果加号两边是数据就进行加法操 作,如果两边是字符串就进行字符串连接操作,如果两边是列表就进行合并操作,甚 至可以进行复数的运算。解释器会在运行时根据两边的变量的类型调用不同的内部方法。 当加号两边的变量类型不一样的时候,又不能进行类型转化,就会抛出TypeError的异常。
但是在实际的开发中,为了提高代码的健壮性,我们还是需要进行类型检查的。而进行 类型检查首先想到的就是用type(),比如使用type判断一个int类型。
import types
if type(1) is types.Integer:
print('1是int类型')
print('1不是int类型')
上面的程序会输出:1是int类型
我们在types中可以找到一些常用的类型,在2.7.6中显示的结果:
types.BooleanType
types.BufferType
buffer类型
types.BuiltinFunctionType
内建函数,比如len()
types.BuiltinMethodType
内建方法,指的是类中的方法
types.ClassType
types.CodeType
代码块类型
types.ComplexType
types.DictProxyType
字典代理类型
types.DictType
types.DictionaryType
字典备用的类型
types.EllipsisType
types.FileType
types.FloatType
types.FrameType
types.FunctionType
types.GeneratorType
types.GetSetDescriptorType
types.InstanceType
types.IntType
types.LambdaType
lambda类型
types.ListType
types.LongType
types.MemberDescriptorType
types.MethodType
types.ModuleType
module类型
types.NoneType
types.NotImplementedType
types.ObjectType
object类型
types.SliceTypeh
types.StringType
字符串类型
types.StringTypes
types.TracebackType
types.TupleType
types.TypeType
types.UnboundMethodType
types.UnicodeType
types.XRangeType
在Python 3中,类型已经明显减少了很多
types.BuiltinFunctionType
types.BuiltinMethodType
types.CodeType
types.DynamicClassAttribute
types.FrameType
types.FunctionType
types.GeneratorType
types.GetSetDescriptorType
types.LambdaType
types.MappingProxyType
types.MemberDescriptorType
types.MethodType
types.ModuleType
types.SimpleNamespace
types.TracebackType
types.new_class
types.prepare_class
但是我们并不推荐使用type来进行类型检查,之所以把这些类型列出来,也是为了扩展知识 面。那为什么不推荐使用type进行类型检查呢?我们来看一下下面的例子。
import types
class UserInt(int):
def __init__(self, val=0):
self.val = int(val)
n = UserInt(2)
print(type(i) is type(n))
上面的代码输出:False
这就说明i和n的类型是不一样的,而实际上UserInt是继承自int的,所以这个判断是存在问题的, 当我们对Python内建类型进行扩展的时候,type返回的结果就不够准确了。我们再看一个例子。
class A():
class B():
print(type(a) is type(b))
代码的输出结果: True
type比较的结果a和b的类型是一样的,结果明显是不准确的。这种古典类的实例,type返回的结果都 是一样的,而这样的结果不是我们想要的。对于内建的基本类型来说,使用tpye来检查是没有问题的, 可是当应用到其他场合的时候,type就显得不可靠了。这个时候我们就需要使用isinstance来进行类型 检查。
isinstance(object, classinfo)
object表示实例,classinfo可以是直接或间接类名、基本类型或者有它们组成的元组。
&&& isinstance(2, float)
&&& isinstance('a', (str, unicode))
&&& isinstance((2, 3), (str, list, tuple))来源&http://www.jb51.net/article/15696.htm
在Python中只需要使用内置的函数isinstance,使用起来非常简单,比如下面的例子:
复制代码 代码如下:
class objA: pass A = objA() B = 'a','v' C = 'a string' print isinstance(A, objA) print isinstance(B, tuple) print isinstance(C, basestring)
输出结果: True True True&
阅读(...) 评论()python中内建函数isinstance的用法 - Mr.风的影子 - 博客园
随笔 - 67, 文章 - 2, 评论 - 0, 引用 - 0
今天上午学习了isinstance,有一点理解,就记录下来了(不知道对不对)
语法:isinstance(object,type)
作用:来判断一个对象是否是一个已知的类型。&
其第一个参数(object)为对象,第二个参数(type)为类型名(int...)或类型名的一个列表((int,list,float)是一个列表)。其返回值为布尔型(True or flase)。
若对象的类型与参数二的类型相同则返回True。若参数二为一个元组,则若对象类型与元组中类型名之一相同即返回True。
下面是两个例子:
&&& a = 4&&& isinstance (a,int)True&&& isinstance (a,str)False&&& isinstance (a,(str,int,list))True
&&& a = "b"&&& isinstance(a,str)True&&& isinstance(a,int)False&&& isinstance(a,(int,list,float))False&&& isinstance(a,(int,list,float,str))True}

我要回帖

更多关于 python3 isinstance 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信