Python 元编程|非科班转码小白友好入门指南
不讲晦涩底层、不堆玄学概念,用转码人听得懂、面试用得上、工作真能写的方式,一次性讲透 Python 元编程。
一、先搞懂:什么是元编程?
大白话: 普通编程:用代码操作数据元编程:用代码操作代码本身
- 普通函数:处理数字、字符串、列表
- 元函数:创建类、修改类、动态生成函数、拦截类创建、拦截属性访问
Python 天生支持元编程,也是它比 Java 灵活无数倍的核心原因, ORM、装饰器、ORM框架、FastAPI、Pydantic、Django 底层全是元编程。
非科班不用啃编译器原理,只记 4 大核心知识点就够用:
- 装饰器(函数元编程)
-
__new__ 魔法方法 - 元类
type - 属性魔术方法
__getattr__ / __setattr__
二、Python 万物皆对象(元编程根基)
非科班必记底层常识:
- 一切都是对象:整数、字符串、函数、类本身都是对象
- 对象由类创建
- 类也是对象,由元类创建
- Python 默认元类:
type
class A:
pass
print(type(A)) # <class 'type'>
类 A 是 type 的实例 → type 就是 Python 原生元类
普通流程: 元类(type) → 创建类 → 创建实例对象
三、第一层元编程:装饰器(90%转码最先接触)
装饰器 = 不修改原代码,增强函数/类功能 典型场景:日志、计时、权限校验、缓存、路由注册
极简入门版
def log(func):
def wrapper(*args, **kwargs):
print("函数执行前")
res = func(*args, **kwargs)
print("函数执行后")
return res
return wrapper
@log
def test():
print("业务逻辑")
本质:动态包装、替换函数,最轻量元编程。
四、第二层:__new__ 类构造魔术方法
创建对象第一步:__new__ 分配内存 第二步:__init__ 初始化属性
非科班理解: __new__ 控制对象诞生 __init__ 控制对象长相
单例模式经典元编程用法
class Singleton:
instance = None
def __new__(cls):
if cls.instance is None:
cls.instance = super().__new__(cls)
return cls.instance
全程不用元类,只用魔法方法,就能控制类创建规则。
五、第三层:元类 type(Python 元编程灵魂)
1. 动态创建类(不用 class 关键字)
正常定义类:
class Student:
name = "张三"
def say(self):
print("hello")
type 动态创建类:
Student = type("Student", (object,), {
"name": "张三",
"say": lambda self: print("hello")
})
类 = type(类名, 父类元组, 属性方法字典)
2. 自定义元类,拦截所有类的创建
class Meta(type):
# 类创建时自动执行
def __new__(cls, name, bases, attrs):
print(f"正在创建类:{name}")
# 可以修改属性、过滤方法、强制规范
return super().__new__(cls, name, bases, attrs)
# 所有继承这个元类的类,都会被管控
class User(metaclass=Meta):
pass
作用:
- 统一校验类字段
- 自动添加方法
- ORM 表映射底层原理
- 强制编码规范、单例、ORM字段映射
六、第四层:属性拦截魔法(运行时元编程)
class Test:
# 访问不存在属性触发
def __getattr__(self, name):
return f"没有属性{name}"
# 设置属性时触发
def __setattr__(self, name, value):
print(f"设置属性 {name} = {value}")
super().__setattr__(name, value)
Pydantic 数据校验、ORM 字段映射、RPC 远程调用,全靠这套。
七、非科班转码学习路线(循序渐进不劝退)
- 先吃透函数装饰器 → 日常写业务高频
- 再学类装饰器
- 理解
__new__、单例模式 - 看懂
type 动态造类 - 简单自定义元类
- 看懂框架底层:Django ORM / FastAPI 参数校验
绝对不要一上来死磕元类!95%业务开发一辈子不用手写复杂元类 但面试必问、看源码必懂。
八、转码面试高频一句话总结
- 元编程:代码操纵代码
- Python 默认元类:
type -
__new__ 创建对象,__init__ 初始化对象 - 元类控制类的创建,装饰器控制函数执行
- ORM、Pydantic、路由框架底层核心都是元编程 + 魔法方法
需要我给你整理极简版元编程面试背诵模板 + 可直接运行小白案例合集吗?