
不讲晦涩底层、不堆玄学概念,用转码人听得懂、面试用得上、工作真能写的方式,一次性讲透 Python 元编程。
大白话:
普通编程:用代码操作数据
元编程:用代码操作代码本身
Python 天生支持元编程,也是它比 Java 灵活无数倍的核心原因,
ORM、装饰器、ORM框架、FastAPI、Pydantic、Django 底层全是元编程。
非科班不用啃编译器原理,只记 4 大核心知识点就够用:
__new__ 魔法方法type__getattr__ / __setattr__非科班必记底层常识:
typeclass A:
pass
print(type(A)) # <class 'type'>类 A 是 type 的实例 → type 就是 Python 原生元类
普通流程:
元类(type) → 创建类 → 创建实例对象
装饰器 = 不修改原代码,增强函数/类功能
典型场景:日志、计时、权限校验、缓存、路由注册
极简入门版
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全程不用元类,只用魔法方法,就能控制类创建规则。
正常定义类:
class Student:
name = "张三"
def say(self):
print("hello")type 动态创建类:
Student = type("Student", (object,), {
"name": "张三",
"say": lambda self: print("hello")
})类 = type(类名, 父类元组, 属性方法字典)
class Meta(type):
# 类创建时自动执行
def __new__(cls, name, bases, attrs):
print(f"正在创建类:{name}")
# 可以修改属性、过滤方法、强制规范
return super().__new__(cls, name, bases, attrs)
# 所有继承这个元类的类,都会被管控
class User(metaclass=Meta):
pass作用:
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 动态造类绝对不要一上来死磕元类!95%业务开发一辈子不用手写复杂元类
但面试必问、看源码必懂。
type__new__ 创建对象,__init__ 初始化对象需要我给你整理极简版元编程面试背诵模板 + 可直接运行小白案例合集吗?
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。