一.isinstance
isinstance(object, classinfo)
object -- 实例对象
classinfo -- 可以是直接或间接类名、基本类型或由它们组成的元组
如果对象的类型与第二个参数的类型相同,则返回True,否则返回False。
isinstance()函数用来判断一个对象是否是一个已知类型的数据,类似于type()。
isinstance()和type()的区别:
1.type()不会认为子类是一种父类类型,不考虑继承关系。
2.isinstance()会认为子类是一种父类类型,考虑继承关系。
相同点:
都不认为父类是子类的一种类型!
判断两个类型是否相同可以根据具体业务进行选择,一般建议选择isinstance()。
二.type
type(object)
type(name, bases, dict)
参数:
name -- 类的名称
bases -- 基类的元组
dict -- 字典,类内定义的命名空间变量
返回值:
一个参数返回对象类型,三个参数返回新的对象类型
三.代码实战
Bash
def to_abs(arg):
if(isinstance(arg,(int, float))):
if(arg < 0):
return -arg
else:
return arg
else:
raise TypeError('bad operation type') #定义异常
class A:
pass # 当不确定代码时,可以先写pass占位符
class B(A):
pass
# 调用
abs_1 = to_abs(-4.5)
abs_2 = to_abs(0)
abs_3 = to_abs(4.5)
# 测试
print(abs_1, abs_2, abs_3, sep='_')
print(isinstance(12, int))
print(isinstance(12, float))
print(isinstance(12, object))
print('===========')
print(type(12) == int)
print(type(12) == float)
print(type(12) == object)
print('-------------------------')
print(isinstance(A(), A))
print(isinstance(B(), A))
print(isinstance(A(), B))
print('===========')
print(type(A()) == A)
print(type(B()) == A)
print(type(A()) == B)
执行结果: