python-pro by jeffallan/claude-skills
npx skills add https://github.com/jeffallan/claude-skills --skill python-pro专注于类型安全、异步优先、生产就绪代码的现代 Python 3.11+ 专家。
mypy --strict、black、ruff
根据上下文加载详细指导:
| 主题 |
|---|
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| 参考 |
|---|
| 加载时机 |
|---|
| 类型系统 | references/type-system.md | 类型提示、mypy、泛型、协议 |
| 异步模式 | references/async-patterns.md | async/await、asyncio、任务组 |
| 标准库 | references/standard-library.md | pathlib、dataclasses、functools、itertools |
| 测试 | references/testing.md | pytest、夹具、模拟、参数化 |
| 打包 | references/packaging.md | poetry、pip、pyproject.toml、分发 |
X | None 而非 Optional[X](Python 3.10+)__init__ 方法from pathlib import Path
def read_config(path: Path) -> dict[str, str]:
"""从文件读取配置。
Args:
path: 配置文件的路径。
Returns:
解析后的键值配置条目。
Raises:
FileNotFoundError: 如果配置文件不存在。
ValueError: 如果某一行无法解析。
"""
config: dict[str, str] = {}
with path.open() as f:
for line in f:
key, _, value = line.partition("=")
if not key.strip():
raise ValueError(f"Invalid config line: {line!r}")
config[key.strip()] = value.strip()
return config
from dataclasses import dataclass, field
@dataclass
class AppConfig:
host: str
port: int
debug: bool = False
allowed_origins: list[str] = field(default_factory=list)
def __post_init__(self) -> None:
if not (1 <= self.port <= 65535):
raise ValueError(f"Invalid port: {self.port}")
import asyncio
import httpx
async def fetch_all(urls: list[str]) -> list[bytes]:
"""并发获取多个 URL。"""
async with httpx.AsyncClient() as client:
tasks = [client.get(url) for url in urls]
responses = await asyncio.gather(*tasks)
return [r.content for r in responses]
import pytest
from pathlib import Path
@pytest.fixture
def config_file(tmp_path: Path) -> Path:
cfg = tmp_path / "config.txt"
cfg.write_text("host=localhost\nport=8080\n")
return cfg
@pytest.mark.parametrize("port,valid", [(8080, True), (0, False), (99999, False)])
def test_app_config_port_validation(port: int, valid: bool) -> None:
if valid:
AppConfig(host="localhost", port=port)
else:
with pytest.raises(ValueError):
AppConfig(host="localhost", port=port)
[tool.mypy]
python_version = "3.11"
strict = true
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
干净的 mypy --strict 输出如下所示:
Success: no issues found in 12 source files
任何报告的错误(例如,error: Function is missing a return type annotation)都必须在实现被视为完成之前解决。
实现 Python 功能时,请提供:
Python 3.11+、typing 模块、mypy、pytest、black、ruff、dataclasses、async/await、asyncio、pathlib、functools、itertools、Poetry、Pydantic、contextlib、collections.abc、Protocol
每周安装量
1.4K
代码仓库
GitHub 星标数
7.3K
首次出现
Jan 20, 2026
安全审计
安装于
opencode1.2K
gemini-cli1.1K
codex1.1K
github-copilot1.1K
claude-code975
cursor963
Modern Python 3.11+ specialist focused on type-safe, async-first, production-ready code.
mypy --strict, black, ruff
Load detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Type System | references/type-system.md | Type hints, mypy, generics, Protocol |
| Async Patterns | references/async-patterns.md | async/await, asyncio, task groups |
| Standard Library | references/standard-library.md | pathlib, dataclasses, functools, itertools |
| Testing | references/testing.md | pytest, fixtures, mocking, parametrize |
| Packaging | references/packaging.md |
X | None instead of Optional[X] (Python 3.10+)from pathlib import Path
def read_config(path: Path) -> dict[str, str]:
"""Read configuration from a file.
Args:
path: Path to the configuration file.
Returns:
Parsed key-value configuration entries.
Raises:
FileNotFoundError: If the config file does not exist.
ValueError: If a line cannot be parsed.
"""
config: dict[str, str] = {}
with path.open() as f:
for line in f:
key, _, value = line.partition("=")
if not key.strip():
raise ValueError(f"Invalid config line: {line!r}")
config[key.strip()] = value.strip()
return config
from dataclasses import dataclass, field
@dataclass
class AppConfig:
host: str
port: int
debug: bool = False
allowed_origins: list[str] = field(default_factory=list)
def __post_init__(self) -> None:
if not (1 <= self.port <= 65535):
raise ValueError(f"Invalid port: {self.port}")
import asyncio
import httpx
async def fetch_all(urls: list[str]) -> list[bytes]:
"""Fetch multiple URLs concurrently."""
async with httpx.AsyncClient() as client:
tasks = [client.get(url) for url in urls]
responses = await asyncio.gather(*tasks)
return [r.content for r in responses]
import pytest
from pathlib import Path
@pytest.fixture
def config_file(tmp_path: Path) -> Path:
cfg = tmp_path / "config.txt"
cfg.write_text("host=localhost\nport=8080\n")
return cfg
@pytest.mark.parametrize("port,valid", [(8080, True), (0, False), (99999, False)])
def test_app_config_port_validation(port: int, valid: bool) -> None:
if valid:
AppConfig(host="localhost", port=port)
else:
with pytest.raises(ValueError):
AppConfig(host="localhost", port=port)
[tool.mypy]
python_version = "3.11"
strict = true
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
Clean mypy --strict output looks like:
Success: no issues found in 12 source files
Any reported error (e.g., error: Function is missing a return type annotation) must be resolved before the implementation is considered complete.
When implementing Python features, provide:
Python 3.11+, typing module, mypy, pytest, black, ruff, dataclasses, async/await, asyncio, pathlib, functools, itertools, Poetry, Pydantic, contextlib, collections.abc, Protocol
Weekly Installs
1.4K
Repository
GitHub Stars
7.3K
First Seen
Jan 20, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode1.2K
gemini-cli1.1K
codex1.1K
github-copilot1.1K
claude-code975
cursor963
React 组合模式指南:Vercel 组件架构最佳实践,提升代码可维护性
102,200 周安装
| poetry, pip, pyproject.toml, distribution |