小白学 Python
AI 编程指南
© 2026 小白学 Python · 基于 walter201230/Python 教程
课程目录关于本站联系方式隐私政策GitHub

全部课程

  1. 00为什么学 Python
  2. 01Python 安装与第一个程序
  3. 02基本数据类型与变量
  4. 03List 与 Tuple
  5. 04Dict 与 Set
  6. 05条件与循环
  7. 06函数
  8. 07迭代
  9. 08面向对象
  10. 09模块
  11. 10魔法方法
  12. 11枚举类
  13. 12元类 metaclass
  14. 13线程与进程
  15. 14正则表达式
  16. 15闭包
  17. 16装饰器
  18. 17代码可读性
  19. 18pathlib:现代化路径处理
  20. 19异常处理
  21. 20dataclass
  22. 21上下文管理器(with)
  23. 22async / await
  24. 23pyproject.toml + uv
  25. 24ruff:一站式代码检查
  26. 25pytest:测试框架
  27. 26日志 logging
  28. 27打包发布到 PyPI
  29. 28学完之后
Python 环境加载中…

元类

3 道练习题·预计 50 分钟·做对一题解锁下一段

完整通读本章 →

教学 01 / 06· 已读

前言

Python 界的领袖 Tim Peters 说的:

元类就是深度的魔法,99% 的用户应该根本不必为此操心。如果你想搞清楚究竟是否需要用到元类,那么你就不需要它。那些实际用到元类的人都非常清楚地知道他们需要做什么,而且根本不需要解释为什么要用元类。

所以,这篇文章,认真阅读一遍就好了。

目录

这一篇的目录如下:

  • 一、Python 中类也是对象
  • 二、使用 type() 动态创建类
  • 三、什么是元类
  • 四、自定义元类
  • 五、使用元类
教学 02 / 06

一、Python 中类也是对象

在了解元类之前,我们先进一步理解 Python 中的类,在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在 Python 中这一点也是一样的。

这点在学习类的章节也强调过了,下面可以通过例子回忆一下:

Python· 结合前文阅读
class ObjectCreator(object):
    pass


mObject = ObjectCreator()
print(mObject)

输出结果:

文本
<__main__.ObjectCreator object at 0x00000000023EE048>

但是,Python 中的类有一点跟大多数的编程语言不同,在 Python 中,可以把类理解成也是一种对象。对的,这里没有写错,就是对象。

为什么呢?

因为只要使用关键字 class ,Python 解释器在执行的时候就会创建一个对象。

如:

Python· 结合前文阅读
class ObjectCreator(object):
    pass

当程序运行这段代码的时候,就会在内存中创建一个对象,名字就是ObjectCreator。这个对象(类)自身拥有创建对象(类实例)的能力,而这就是为什么它是一个类的原因。

但是,它的本质仍然是一个对象,于是我们可以对它做如下的操作:

Python· 结合前文阅读
class ObjectCreator(object):
    pass


def echo(ob):
    print(ob)


mObject = ObjectCreator()
print(mObject)

# 可以直接打印一个类,因为它其实也是一个对象
print(ObjectCreator)
# 可以直接把一个类作为参数传给函数(注意这里是类,是没有实例化的)
echo(ObjectCreator)
# 也可以直接把类赋值给一个变量
objectCreator = ObjectCreator
print(objectCreator)

输出的结果如下:

文本
<__main__.ObjectCreator object at 0x000000000240E358>
<class '__main__.ObjectCreator'>
<class '__main__.ObjectCreator'>
<class '__main__.ObjectCreator'>
练习 1 / 3·类的类是什么?题目有问题?

请定义一个最普通的类 Foo(里面写 pass 即可)。

然后用 type() 检查 Foo 的类型,再用 is 判断它是不是 type,按下面的格式打印两行:

文本
<class 'type'>
True

提示:第一行是 print(type(Foo)),第二行是 print(type(Foo) is type)。

main.py
可编辑
🔒做对当前题解锁下一段 ·0/3

推荐一个,全网最全最友好的中文 AI 编程指南: coding.stormzhang.ai

← 上一章11 · 枚举类
元类
下一章 →13 · 线程与进程
本章目录

元类

  1. 教学 01前言
  2. 教学 02一、Python 中类也是对象
  3. 练习 1类的类是什么?
  4. 教学 03 🔒二、使用 `type()` 动态创建类
  5. 练习 2 🔒用 type() 三参数动态造类
  6. 教学 04 🔒三、什么是元类
  7. 教学 05 🔒四、自定义元类
  8. 练习 3 🔒自定义元类自动加属性
  9. 教学 06 🔒五、使用元类

学习目录