HoRain云--Python类型注解与元编程:Type Hints、mypy、元类

📅 发布时间:2026/10/11 7:30:32
HoRain云--Python类型注解与元编程:Type Hints、mypy、元类
Python是动态类型语言但类型注解能显著提升代码可维护性。本文讲解Type Hints、mypy、泛型、元类等进阶特性。一、基础类型注解python复制下载def greet(name: str, age: int) - str: return f{name} is {age} from typing import List, Dict, Optional, Union def process(items: List[int]) - Dict[str, int]: return {sum: sum(items)} def find(user_id: int) - Optional[str]: return None二、泛型python复制下载from typing import TypeVar, Generic T TypeVar(T) class Stack(Generic[T]): def __init__(self) - None: self.items: list[T] [] def push(self, item: T) - None: self.items.append(item) def pop(self) - T: return self.items.pop()三、mypy静态检查bash复制下载pip install mypy mypy app/配置mypy.iniini复制下载[mypy] python_version 3.11 warn_return_any True disallow_untyped_defs True四、Protocol与结构化子类型python复制下载from typing import Protocol class Drawable(Protocol): def draw(self) - None: ... def render(obj: Drawable) - None: obj.draw()五、元类python复制下载class SingletonMeta(type): _instances {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] super().__call__(*args, **kwargs) return cls._instances[cls] class Database(metaclassSingletonMeta): pass六、装饰器与描述符python复制下载class Validator: def __init__(self, min_value0): self.min_value min_value def __set_name__(self, owner, name): self.name name def __get__(self, obj, objtypeNone): return obj.__dict__[self.name] def __set__(self, obj, value): if value self.min_value: raise ValueError(f{self.name}不能小于{self.min_value}) obj.__dict__[self.name] value class Product: price Validator(min_value0)七、动态创建类python复制下载def create_model(name, fields): return type(name, (object,), fields) User create_model(User, {id: 1, name: Tom}) u User() print(u.name)八、总结类型注解让Python代码更健壮元编程赋予框架强大扩展能力。合理使用能写出优雅且可维护的代码。