⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Python dataclass

学习dataclass · 难度:进阶 · +15XP

Python dataclass 数据类

dataclass 是 Python 3.7 引入的一个装饰器,用于自动生成类的 __init____repr____eq__ 等特殊方法。它极大地减少了样板代码,让数据类的定义变得简洁优雅,特别适合用于表示数据记录、DTO(数据传输对象)和配置类。

基本用法

from dataclasses import dataclass

@dataclass class Student: name: str age: int grade: float courses: list = None # 提供默认值

# 自动生成 __init__ 和 __repr__ stu = Student('小明', 18, 92.5) print(stu) # Student(name='小明', age=18, grade=92.5, courses=None)

# 自动生成 __eq__ stu2 = Student('小明', 18, 92.5) print(stu == stu2) # True

field() 配置选项

from dataclasses import dataclass, field

@dataclass class Product: name: str price: float tags: list = field(default_factory=list) # 可变默认值

# 不在 __repr__ 中显示 secret_key: str = field(default='', repr=False)

# 不在 __init__ 中作为参数 created_at: str = field(default='', init=False)

def __post_init__(self): # 初始化后处理 if not self.created_at: from datetime import datetime self.created_at = datetime.now().isoformat()

p = Product('Laptop', 5999.99) print(p) # Product(name='Laptop', price=5999.99, tags=[])

高级配置

from dataclasses import dataclass, field

@dataclass(order=True) # 启用排序 class Item: sort_index: int = field(init=False, repr=False) name: str value: int

def __post_init__(self): self.sort_index = self.value

@dataclass(frozen=True) # 不可变数据类 class Point: x: float y: float

p = Point(1.0, 2.0) # p.x = 3.0 # FrozenInstanceError!不可修改

@dataclass(kw_only=True) # Python 3.10+: 仅限关键字参数 class Config: host: str port: int debug: bool = False

dataclass 参数速查表

参数默认值说明
initTrue是否生成 __init__ 方法
reprTrue是否生成 __repr__ 方法
eqTrue是否生成 __eq__ 方法
orderFalse是否生成排序方法
frozenFalse是否创建不可变对象
slotsFalse是否使用 __slots__ 节省内存
kw_onlyFalse字段是否仅限关键字参数
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 152 篇
0 完成
🔥 0