任何一个类都可以做为类型!

创建类的实例时, 该实例的类型是这个类本身, 如果有继承存在, 则父类型也是这个实例的类型.

有些情况下, 我们需要先测试实例的类型然后再写相应的代码.


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

说明:

  1. 这个函数返回的是布尔值, 使用起来方便, 所以以后测试类型建议用这个函数

  2. 这个函数继承关系也可以测试出来. bB类创建出来的, B继承自A, 所以b也算是类A的实例.

  3. 对一个实例也可以同时测试多个类型, 有一个满足就返回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 组成的元组
Copyright © 李振超 2018 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-02-25 07:12:09

results matching ""

    No results matching ""