简介:python怎么判断变量是否为某个对象的子类
在python中如何判断一个变量的类型?
我们之前的文章中一直都是通过 type() 打印变量的类型,这个函数让我们知道变量的具体类,例如下方代码:
a = 3
a_type = type(a)
print(a_type) # 打印的结果:<class 'int'>
从打印的结果可以看出变量的具体类型,如上面的就是一个 int 类型。我们可以通过比较运算符 == 判断是否为 int 类型,具体方式如下:
a = 3
a_type = type(a)
print(a_type == int) # 打印的结果为True
如果变量是一个对象,打印的结果又是什么呢?我们又该如何判断这对象是否是某个类的子类呢?
我们先来看看下方的示例代码:
class People():
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
class Student(People):
def __init__(self, name, age, sex):
super().__init__(name, age, sex)
s = Student('小米',10,'女')
print(type(s)) #打印的结果:<class '__main__.Student'>
从上面的打印的结果可以看出,实例化后的对象使用 type() 打印出来的结果是子类的对象,因此我们可以和之前一样通过比较运算符判断他是否为某个类的对象,具体方式如下:
print(type(s)==Student) #打印的结果是True
print(type(s)==People) #打印的结果是False
虽然我们已经可以通过 type() 函数加比较运算符 == 判断对象是否为某个类的对象,但是我们无法判断是否为某个类的子类啊?
对于判断变量类型,python还单独内置了一个函数 isinstance() ,与 type() 函数不同的是,isinstance() 不仅可以判断变量是否为指定类型,还可以判断是否为某个对象的子类。
一般而言,在python编程习惯中,type() 函数都是用于判断某个变量是否为某个数据类型,isinstance() 函数一般用于判断对象的类型。此外 type() 函数返回的是一个bool类型,而isinstance() 函数返回的是具体的对象。
isinstance函数的语法如下:
isinstance(object, classinfo)
参数一是待判断的变量,可以是对象也可以是其他数据类型。参数二是比较的数据类型,第二个参数还可以是一个元组的格式。如果参数二是元组时,isinstance函数以 or 的方式判断。
关于isinstance函数的具体用法如下:
class People():
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
class Student(People):
def __init__(self, name, age, sex):
super().__init__(name, age, sex)
s = Student('小米',10,'女')
print(isinstance(s,Student)) #打印结果:True
print(isinstance(s,People)) #打印结果:True
print(isinstance(s,object)) #打印结果:True
print(isinstance(s,(People,str))) #打印结果:True
注意最下面的判断,参数二是一个元组,isinstance 判断对象s 是否等于 People 或者 等于 str,这两者之前是存在其一即可。
有遗漏或者不对的可以在我的公众号留言哦