先来一段代码:
a = 1
b = 'abc'
print(type(1)) # <class 'int'>
print(type(int)) # <class 'type'>
print(type(b)) # <class 'str'>
print(type(str)) # <class 'type'>
得出如下结论,1是int类型,而int是一个type类型,int本身也是一个对象,是由type这个类来生成的。
所以关系如下:type ---> int ----> 1
int和str都是python中内置的类,那我们自己创建的类呢?
class Student:
def __init__(self):
pass
class MyStudent(Student):
def __init__(self):
pass
stu = Student()
print(type(stu)) # <class '__main__.Student'>
print(type(Student)) # <class 'type'>
print(int.__bases__) # (<class 'object'>,)
print(str.__bases__) # (<class 'object'>,)
print(Student.__bases__) # (<class 'object'>,)
print(MyStudent.__bases__) # (<class '__main__.Student'>,)
print(type.__bases__) # (<class 'object'>,)
print(object.__bases__) # ()
print(type(object)) # <class 'type'>
得到这个结论:type ----> class ----> obj。
类是type类的实例对象。也就是说,不管是python中内置的int、str类,还是我们自己创建的Student类,它们都是type类的实例对象。
而MyStudent.__bases__得到结果是:(<class '__main__.Student'>,)
MyStudent是继承Student这个类的
所以有了这个概念 object类是最顶层的基类
而 type本身也是一个类,但是提示type也是一个对象
type的父类type.__bases__是object
而type(object)居然是<class 'type'> 这个说明了什么,
object是由type产生,但是type却是继承了object。
而object的基类是空,也就是说,object没有继承其他的类了。
看下面的一张图:
以分为三类:左边是type,中间是继承关系,最右边的是实例;
三者之间的关系
1、 object是type的一个实例。
2、 list str int dict tuple 所有类都是type的一个实例对象。
3、 object是所有类的基类,type也要继承object。
4、type是object的一个实例对象。
5、 type本身也是自己的一个实例对象。
可以看到任何元素都是对象(都是type的
实例对象),一切都继承object。
这就理解python中什么是一切皆对象,和其实现原理。
总结:
1、 python中一切皆对象,可以赋值给一个变量,可以添加到集合对象中,可以作为参数传递给函数,可以作为函数的返回值
2、一切皆对象,一切都是可以修改的