Python中的元类(metaclass)是什么

little bottle
发布: 2020-09-17 10:21:31
原创
4132 人浏览过

python中的元类是指用来创建类的对象。python中的type()函数实际上就是一个元类,type()函数用来创建所有类的元类。如果要创建自定义的元类,也要从type中继承。

Python中的元类(metaclass)是什么

在python中,类也是对象,当我们使用class关键词创建一个类的时候,Python解释器仅仅是扫描一下class定义的语法,然后调用type()函数创建出class。那么你知道创建类的是什么吗?其实他是元类。

元类是什么?

元类实际上就是用来创建类的对象。

为了帮助我们理解,我们可以这样想,我们创建类就是为了创建类的实例,同样的,我们创建元类就是为了创建类。

元类就是类(实例)的类,就像下面这样:

Metaclass() = class
class() = object # object==>实例
登录后复制

理解了什么是元类,我们再来看一看type()函数。

其实type就是一个元类,type就是我们用来创建所有的类的元类。(如果我们要创建自己定义的元类的话,也要从type中继承)

元类的工作原理:

我们来看一下下面这个例子

class ReedSunMetaclass(type):
    pass
class Foo(object, metaclass = ReedSunMetaclass): 
    pass
class Bar(Foo):
    pass
登录后复制

首先,我们创建了一个元类ReedSunMetaclass

(注意!按照默认习惯,元类的类名总是以Metaclass结尾,以便清楚地表示这是一个元类)。

然后,我们又用元类ReedSunMetaclass创建了一个Foo类。

(同时,Foo类的属性__metaclass__就变成了ReedSunMetaclass)。

最后,我们创建了一个子类Bar继承自Foo。

我们来试着理解一下在python内部是怎么执行这几个步骤的:

对于父类Foo,Python会在类的定义中寻找__metaclass__属性,如果找到了,Python就会用它来创建类Foo,如果没有找到,就会用内建的type来创建这个类。很显然,它找到了。

对于子类Bar, python会先在子类中寻找__metaclass__属性,如果找到了,Python就会用它来创建类Bar,如果没有找到,就再从父类中寻找,直到type。显然,它在父类中找到了。

我们可以看到使用元类的一个好处了,即他可以让子类隐式的继承一些东西。

以上是Python中的元类(metaclass)是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!