来源:python中国网 时间:2019-06-06

  了解type类之前,先看下面的代码

# -*- coding: utf-8 -*-

class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age

p = Person("老董",28)

print(type(p))  
print(type(Person)) 

D:python3installpython.exe D:/python/py3script/python66.py
<class '__main__.Person'>
<class 'type'>

Process finished with exit code 0


  在Python中一切事物都是对象。上面代码中,p1是通过Person类实例化的对象,不仅p1是一个对象,Person类本身也是一个对象。按照一切事物都是对象的理论:p1对象是通过执行Person类的构造方法创建,那么Person类对象应该也是通过执行某个类的构造方法创建。

  type是如何创建一个类的呢?看代码:

# -*- coding: utf-8 -*-

def __init__(self,name,age):
    self.name = name
    self.age = age
    print("__init__ ", name,age)

Person2 = type("Person2",(object,),{"__init__":__init__})
p = Person2("老董",28)
print(type(Person2))

D:python3installpython.exe D:/python/py3script/python66.py
__init__  老董 28


Process finished with exit code 0

  解释:

  1.Person2 是类名

  2.(object,)是这个类要继承的类

  3.{"__init__":__init__}是这个类的方法

  了解类本身是通过type创建的,以后我们在代码中就可以动态的生成类了,而不是提前必须先定义好。django框架生成动态表单就用到这个知识点。

  在python中定义一个类时,会继承object,object是所有类的基类。在python3中,即使没有写出来继承object类,他也会继承的。除了type类、object类,还有很多内置类比如字符串、整型、列表以及自定义的类,他们的关系如下:

  1.内置类是由type类生成的对象;

  2.object类基类,所有的类默认继承object;

  3.object是type的对象,type的父类是object,type也是自身type类的对象

# -*- coding: utf-8 -*-

print(object.__base__)  # object类没有父类   None
print(object.__class__)  # object类  的元类是 type

print(type.__base__)  # type元类   的父类是  object
print(type.__class__)  # type元类   的元类是  type

print(int.__base__)  # 内置int类   的父类是  object
print(int.__class__) # 内置int类   的元类是  type

class A:
    pass
print(A.__base__)  # A类   的父类是  object
print(A.__class__) # A类   的元类是  type

D:python3installpython.exe D:/python/py3script/python66.py
None
<class 'type'>
<class 'object'>
<class 'type'>
<class 'object'>
<class 'type'>
<class 'object'>
<class 'type'>

Process finished with exit code 0