Python一切皆对象_ type & object & class
相比较于Java等静态语言,在Python中一切皆对象的概念更加彻底,函数和类都是对象,这样使得Python更加灵活。下面将对Python中对type、object以及class对关系进行梳理。
关系图:
先来看下面的示例一:
>>> a = "hello"
>>> type("hello")
<class 'str'>
>>> type(str)
<class 'type'>
>>> class Student:
... pass
...
>>> type(stu)
<class '__main__.Student'>
>>> type(Student)
<class 'type'>
我们都知道通过内置的type函数可以打印对象的类型,从上面例子中可以看出字符串"hello"是由str类生成的对象,而str类对象(在一切皆对象中,这里把类这种对象称为类对象)又是type类生成的对象(1 <-- int <-- type);stu对象是由我们自定义类Student生成的,而Student类对象也是由type类生成的(stu <-- Student <-- type)。
从示例一中,可以总结出:在Python中自定义类和内置类都是对象,是由type类生成的(又称为元类)。
接下来思考下面一个问题:既然一切皆对象,那么type类对象又是由什么创建的呢?可以简单测试下:
>>> type(type)
<class 'type'>
可以看出type类对象是由它本身创建的。
再来看一下类的继承关系,我们都知道在Python中object类是一切类的基类,可以通过查看 __bases__
属性,看下示例一中自定义的Student类:
>>> class Student:
... pass
...
>>> Student.__bases__
(<class 'object'>,)
那么可以猜想下:type类的基类又是谁呢?
>>> type.__bases__
(<class 'object'>,)
>>> object.__bases__
()
>>> type(object)
<class 'type'>
通过验证可以知道type类也继承自object类,而object类没有继承的类;并且object类也是由type类生成的。(这里比较绕,可以再回顾下最开始的关系图)