本文基于python3
0.引入
元类就是深度的魔法,99%的用户应该根本不必为此操心。如果你想搞清楚究竟是否需要用到元类,那么你就不需要它。那些实际用到元类的人都非常清楚地知道他们需要做什么,而且根本不需要解释为什么要用元类。
--Python界的领袖 Tim Peters
1.困惑
如果你还没看过元类编程,推荐你看完再来看这篇文章。
来看这篇文章的童鞋都是在看完一部分python的元类编程后,产生了宇宙究极问题:到底是先有鸡还是先有蛋。我当时也十分纠结到底type和object谁是谁的爸爸。
2.分析
type
和object
之间的关系:
>>> object.__class__
<type 'type'>
以上说明object
类是type
元类的一个实例对象。
>>> object.__bases__
()
object
这个类的父类为空,说明 object类已经处于继承链条的顶端,是所有类的父类。
>>> type.__class__
<type 'type'>
说明type
也是type
实例出来的。
>>> type.__base__
<type 'object'>
type
的父类是object
。
刚刚表达大致的关系如下(手残勿喷):
type和object的关系 .jpg
3. 总结
- 在不考虑元类编程,也就是自定义元类的情况下,所有的类都是由
type
创造出来的。包括object
。 -
type
创造了所有类,包括object
。 -
object
是所有类的最高父类。 - 对象的类型叫作类
class
,类的类型就称作元类meta-class
。是不是很像“爸爸的爸爸叫爷爷”?
可以参考如下关系:
python中对象的类型
图片出处
我们可以通俗的说是元类(默认是type
)实例出了所有的类,类又实例出了对象。三个空格代表三种对象
。自己的理解,如有问题可以联系我。
4.相关文章推荐
Python 的 type 和 object 之间是怎么一种关系?
python 中type和object的关系
Python中的元类是什么?
Python 元类 (MetaClass) 小教程
网友评论