通过以下代码可以了解 type、object、class 的关系:
a=1
b="abc"
print (type (1))
print (type (int))
print (type (b))
print (type (str))
输出:
<class 'int'>
<class 'type'>
<class 'str'>
<class 'type'>
这说明:
type -> int -> 1
type -> class -> object
type这个类生成一个类型,这个类型再生成一个对象。
得出结论:类是由type这个类生成的对象。
object是最顶层的基类,所有的类推算到最后,它们的基类都是object。
可以再看下面的例子:
class Student:
pass
class Mystudent (Student):
pass
stu = Student()
print(type (stu))
print(type (Student))
print(int.__bases__)
print(str.__bases__)
print(Student.__bases__)
print(Mystudent.__bases__)
print(type.__bases__)
print(object.__bases__)
print(type (object))
输出:
<class '__main__.Student'>
<class 'type'>
(<class 'object'>,)
(<class 'object'>,)
(<class 'object'>,)
(<class '__main__.Student'>,)
(<class 'object'>,)
()
<class 'type'>
结论:
1、自定义的类,他的类型也是type。
2、所有的类的最顶层的基类,是object。
3、object 的上一层,没有了,object 就是最顶层。
4、type 本身是一个类,同时也是一个对象,它的父类是 object。
5、object 这个类是由 type 生成的。
6、所有的类,都是有 type 生成的, 包括 type 也是由 type 生成的。
list 是一个类,是type生成的类,也是一个对象,object 的对象。
object 是 type 的一个实例,type 是继承自 object。
object 是所有类的一个基类。
一切皆对象,一切皆继承自 object 。
所有的类都是由 type 创建出来的。
这就是 Python 的设计理念:一切皆对象。
既然所有的东西都是对象,那么函数、类都是对象,那么就都可以修改,如果是Java,虽然也能改,但是特别麻烦。
Python 的两套体系,一个是 type,一个是 object,可以很好地实现这一点。