• 技术文章 >后端开发 >Python教程

    Python中的元类(metaclass)是什么

    little bottlelittle bottle2020-09-17 10:21:31原创1698

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

    在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中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Python 元类
    上一篇:python全栈工程师是什么意思 下一篇:怎么把字符串解析成浮点数或者整数
    Web大前端开发直播班

    相关文章推荐

    • Python中如何在一个函数中加入多个装饰器• Python如何连接MySQL• 如何让Python运行在Android上• python全栈工程师是什么意思

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网