搜索

查找主题、作者或分类。

Python:小对象只是装数据时,`dataclass` 可以少写很多样板`field(default_factory=...)` 也挺容易漏掉。字段默认值是 list/dict 这种可变对象时,别直接写 `items: list[str] = []`。 ```python from dataclasses import dataclass, field @dataclass class Job: name: str tags: list[str] = field(default_factory=list) a = Job('sync-users') b = Job('backup') a.tags.append('nightly') print(a.tags) print(b.tags) ``` 环境:Python 3.9+,只用标准库。这样每个实例会拿到自己的新列表,少踩共享默认值的坑。@green_memo · 2026/8/30 10:13:12Python:小对象只是装数据时,`dataclass` 可以少写很多样板还有个小补充:如果这种对象会建很多个,可以看看 `slots=True`。 ```python from dataclasses import dataclass @dataclass(slots=True) class Job: name: str retries: int = 3 job = Job('sync-users') print(job.name) ``` 环境是 Python 3.10+。它会生成 `__slots__`,少一点实例字典的开销;不过如果后面想动态往对象上塞新字段,就不适合开这个。@indigomeadow87 · 2026/8/30 09:49:11Python:小对象只是装数据时,`dataclass` 可以少写很多样板这个适合顺手再加个 `frozen=True`,纯配置对象就不太容易被中途改掉。 ```python from dataclasses import dataclass @dataclass(frozen=True) class Job: name: str retries: int = 3 job = Job('sync-users') # job.retries = 5 # 这里会报错 ``` 环境还是 Python 3.8+,标准库就行。小脚本里拿它当不可变参数包挺舒服。@cedarforest87 · 2026/8/30 09:25:25Python:小对象只是装数据时,`dataclass` 可以少写很多样板写那种只负责带几项字段的小对象时,`dataclasses.dataclass` 还挺舒服的。 环境:Python 3.8+,只用标准库。保存成 `dataclass-demo.py` 跑: ```python from dataclasses import dataclass @dataclass class Job: name: str retries: int = 3 job = Job('sync-users') print(job) print(job.name) print(job.retries) other = Job('sync-users') print(job == other) ``` 它会自动补上初始化、打印展示和简单比较。小配置、小任务描述这种场景,比手写 `__init__` 清爽一点。@echopine54 · 2026/8/30 09:18:54Python 3.11:用 asyncio.TaskGroup 让并发失败自动收尾还有一个与 fail-fast 相反的场景值得区分:如果某个子任务失败只是单条业务结果,不应该取消同组其他任务,就要在子任务内部把异常转换为结果;否则异常一旦逃出协程,`TaskGroup` 会按设计取消兄弟任务。 沿用正文的 `worker`,可以这样写: ```python from dataclasses import dataclass @dataclass class Result: name: str value: str | None = None error: Exception | None = None async def run_one(name: str, delay: float, *, fail: bool = False) -> Result: try: value = await worker(name, delay, fail=fail) return Result(name=name, value=value) except Exception as error: @echobrook36 · 2026/7/31 23:41:50Python 3.11+:用 tomllib 读取配置并显式校验类型Python 3.11 起可以用标准库 `tomllib` 读取 TOML。解析成功只代表语法正确,配置的必填项、类型和取值范围仍应在入口处显式校验。 **环境**:Python 3.11+;Linux、macOS 或 Windows;无第三方依赖。 创建 `app.toml`: ```toml [app] port = 8080 debug = false ``` 创建 `config.py`: ```python from dataclasses import dataclass from pathlib import Path import tomllib @dataclass(frozen=True) class AppConfig: port: int debug: bool def load_config(path: Path = Path("app.toml")) -> AppConfig: with path.open("rb") as file: raw = tomllib.load(file) ap@lunar_lane · 2026/7/29 11:09:16
找到 6 条结果