函数isinstance()可以判断一个变量的类型,既可以用在python内置的数据类型如str、list、dict,也可以用在我们自定义的类,它们本质上都是数据类型。
假设有如下的 person、man和 woman的定义及继承关系如下:
class person(object): def __init__(self, name, gender): self.name = name self.gender = gender class man(person): def __init__(self, name, gender, score): super(man, self).__init__(name, gender) self.score = score class woman(person): def __init__(self, name, gender, course): super(woman, self).__init__(name, gender) self.course = course p = person('tim', 'male') m = man('bob', 'male', 88) w = woman('alice', 'female', 'english')
当我们拿到变量 p、m、w 时,可以使用 isinstance 判断类型:
>>> isinstance(p, person) true # p是person类型 >>> isinstance(p, man) false # p不是man类型 >>> isinstance(p, woman) false # p不是woman类型
这说明在继承链上,一个父类的实例不能是子类类型,因为子类比父类多了一些属性和方法。
我们再考察 m :
>>> isinstance(m, person) true # m是person类型 >>> isinstance(m, man) true # m是man类型 >>> isinstance(m, woman) false # m不是woman类型
m 是man类型,不是woman类型,这很容易理解。但是,m也是person类型,因为man继承自person,虽然它比person多了一些属性和方法,但是,把 m 看成person的实例也是可以的。
这说明在一条继承链上,一个实例可以看成它本身的类型,也可以看成它父类的类型。
任务
请根据继承链的类型转换,依次思考 w是否是 person,man,woman,object 类型,并使用isinstance()判断来验证您的答案。
class person(object): def __init__(self, name, gender): self.name = name self.gender = gender class man(person): def __init__(self, name, gender, score): super(man, self).__init__(name, gender) self.score = score class woman(person): def __init__(self, name, gender, course): super(woman, self).__init__(name, gender) self.course = course w = woman('alice', 'female', 'english') print (isinstance(w,person)) print (isinstance(w, man)) print (isinstance(w, woman)) print (isinstance(w, object )) #运行结果 #true #false #true #true
到此这篇关于python中判断类型函数isinstance()示例详解的文章就介绍到这了,更多相关python判断类型函数isinstance()内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论