任何一个类都可以做为类型!
创建类的实例时, 该实例的类型是这个类本身, 如果有继承存在, 则父类型也是这个实例的类型.
有些情况下, 我们需要先测试实例的类型然后再写相应的代码.
python 支持 2 种测试方法:
内置函数:type(实例)
class A:
pass
class B(A):
pass
class C:
pass
a = A()
b = B()
c = C()
print(type(a))
print(type(b))
print(type(c))
说明:
type
返回的是这个实例的所属类的类对象.
补充一下: 其实我们经常接触到的有两种对象:1. 实例对象 2. 类对象
类对象就是: 表示类本身的那个对象!
内置函数:isinstance(实例, 类型)
class A:
pass
class B(A):
pass
class C:
pass
a = A()
b = B()
c = C()
print(isinstance(a, A)) # True
print(isinstance(b, B)) # True
print(isinstance(b, A)) # True 继承关系
print(isinstance(c, C)) # True
print(isinstance(c, A)) # False
说明:
这个函数返回的是布尔值, 使用起来方便, 所以以后测试类型建议用这个函数
这个函数继承关系也可以测试出来.
b
是B
类创建出来的,B
继承自A
, 所以b
也算是类A
的实例.对一个实例也可以同时测试多个类型, 有一个满足就返回
True
,isinstance(实例, (类 a, 类 b, ...)))
. 需要把多个类封装到一个tuple
中.
print(isinstance(c, (A, B, C))) # True
类与类的关系: issubclass(类1, 类2)
用来测试类1
是不是类2
的子类.
class A:
pass
class B(A):
pass
class C:
pass
print(issubclass(B, A)) # True
print(issubclass(C, A)) # False
print(issubclass(A, B)) # False
print(issubclass(A, object)) # True
print(issubclass(C, (object, A))) # True 第二个参数也是可以 class 组成的元组