首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python自学成才之路 什么是元类

Python自学成才之路 什么是元类

作者头像
我是李超人
发布2020-08-20 16:56:53
发布2020-08-20 16:56:53
5980
举报

文章目录
  • 什么是元类?
  • 元类是干什么的?
  • 有哪些元类?
  • 为什么要学元类?

什么是元类?

有这么一个类

代码语言:javascript
复制
class A(object):
    pass

a = A()
print(type(a))

输出:
<class '__main__.A'>

类A的实例a类型是<class ‘main.A’>,如果把type用在类A上会输出什么?

代码语言:javascript
复制
print(type(A))

输出:
<class 'type'>

输出结果<class ‘type’>,这个type到底是什么类型,在来看看下面两个案例。

代码语言:javascript
复制
s = "ads"
print(type(s))
print(type(str))


x = 100
print(type(x))
print(type(int))

输出:
<class 'str'>
<class 'type'>
<class 'int'>
<class 'type'>

str和int使用type输出都是<class ‘type’>,这个type很神奇,为何python基本数据类型使用type()返回的是type类型,type()用来类上面返回的也是type类型,难道是这些都没有类型了所有type()没有结果返回就返回了<class ‘type’>。不是的,其实这个type叫做元类。

元类是干什么的?

python中一切都是对象,包括基本的数据类型,函数等都是对象。其实类也是对象,这里很绕,类本身是用来创建对象的,既然类本身也是一个对象,那类这个对象谁类实例化的?是由元类来实例化的。所以上面创建a这个对象实例时过程实际上是: type创建A这个类实例,A这个类实例创建a这个对象实例。

有哪些元类?

要说元类有哪些,顶级元类只有type,但是通过继承type能够实现自定义元类。比如下面这个案例:

代码语言:javascript
复制
class MetaClass(type):
    pass


class Demo(metaclass=MetaClass):
    pass

可以通过metaclass参数来指定元类,如果没有指定,默认都是使用type这个元类。

为什么要学元类?

元类涉及到python创建对象的生命周期,理解了元类你会对python有一个更深刻的认识,知其然,更要知其所以然。很多优秀的框架都用到了元类编程,比如flask,sqlalchemy等,如果你要阅读这些框架的源码,元类编程是需要懂的。如果你想自己做一些开源框架,那必须要熟练使用元类编程。

既然元类能够创建一个类实例,那么就能在元类中对类做一些手术,通过元类来干预类的创建过程,叫做元编程。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 什么是元类?
  • 元类是干什么的?
  • 有哪些元类?
  • 为什么要学元类?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档