type

type
  type是Python内置的一个类,其签名如下:
    type(object) -> the object's type
    type(name, bases, dict) -> a new type
  type有两种用法,第一种用法,是用来判断实例的类型;第二种用法,是用来创建类。

type判断类型

  可以将type看作是内置的函数,用来获取实例的类型。因为在Python中类也是实例的一种,所以也可以用来获取类的类型。
  例如,下面的程序用来获取实例和类的类型:

class A(object):
    pass

a = A()

print('type(a):', type(a))
print('type(A):', type(A))
print('type(type):', type(type))

  程序输出:

type(a):
type(A):
type(type):

  由此可见,可以通过type获取实例对应的类(类A的实例a的类型是A),类的类型是type(类A的类型是type),而type的类型是type。

type创建类

  在Python中,可以使用关键字class来创建类。以下是创建类Dog的例子:

class Dog(object):
    def say(self):
        print('Hello!')

dog = Dog()
dog.say()

  程序输出:

Hello!

  除了使用关键字class外,我们还可以使用type来动态创建类。type()可以传入三个参数:
    name:类的名称
    bases:基类组成的元组
    dict:类的属性组成的字典
  type()会返回要创建的类。
  下面是一个使用type创建类Dog的例子:

def func(self):
     print('Hello!')

Dog = type('Dog', (object,), dict(say=func))
dog = Dog()
dog.say()

  程序输出:

Hello!

  上面的程序先定义一个函数func(),然后调用type()来创建类Dog,传入的参数包括:类名'Dog',基类组成的元组(object,),类的属性组成的字典{'say': func}。从程序输出可以看出,使用关键字class和使用type创建的类的功能是一样的。实际上,当使用关键字class来定义类时,Python也是扫描类的定义,然后使用type来创建要定义的类。