Реализует современные аннотации типов Python, структурную типизацию с помощью Protocols и паттерны типобезопасности для создания надежного кода.
- Звёзды на GitHub
- 81
- Файлы
- 9
- Последний коммит
- 7 нояб. 2026 г.
- Лицензия
- MIT
- Разрешённые инструменты
- 2
Что делает навык python-typing-ops?
python-typing-ops — это Agent Skill. Реализует современные аннотации типов Python, структурную типизацию с помощью Protocols и паттерны типобезопасности для создания надежного кода.
Сводка сгенерирована из SKILL.md навыка.
О skill python-typing-ops
Этот SKILL позволяет разработчикам, создающим безопасные и документированные кодовые базы, внедрять современные аннотации типов Python и паттерны структурной типизации. Он предоставляет комплексный набор инструментов для применения аннотаций типов, дженериков и структурной типизации через Protocols для обеспечения надежности кода. Когда агент загружает этот SKILL, он может генерировать или рефакторить код, используя такие продвинутые возможности, как TypeVar, TypedDict и типы Literal.
SKILL поддерживает синтаксис Python 3.10+, включая объединение типов (union types), а также специфические паттерны для Python 3.11+, такие как Self и TypeVarTuple. Он помогает настраивать и запускать инструменты проверки типов, такие как mypy и pyright, для валидации целостности кода. Используя эти паттерны, разработчики могут выйти за рамки базовых аннотаций и реализовывать сложную логику, например TypeGuards для сужения типов (type narrowing) и структурную типизацию для гибкого определения интерфейсов. Это делает его незаменимым инструментом для всех, кто стремится сократить количество ошибок во время выполнения с помощью статического анализа.
Что агент может делать с ним
- 1Реализация структурной типизацииОпределение Protocol, позволяющего передавать в функцию любой объект, обладающий определенным методом.
- 2Определение словарей с фиксированными ключамиСоздание TypedDict для обеспечения доступа к словарю через конкретные, типобезопасные ключи.
- 3Валидация кода с помощью инструментов проверки типовЗапуск команд mypy или pyright для поиска ошибок типизации в директории с исходным кодом.
Написано на основе skill SKILL.md. Каждый сценарий использования проверен по цитате из него.
Как установить навык python-typing-ops
Каждая команда копирует папку навыка в каталог навыков клиента. Перезапустите клиент или начните новую сессию, чтобы загрузить его.Установка навыка python-typing-ops в Плагин
/plugin marketplace add 0xDarkMatter/claude-mods /plugin install claude-mods@claude-mods
Установка навыка python-typing-ops в Claude Code
~/.claude/skills/python-typing-ops/SKILL.md
$ npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops ~/.claude/skills/python-typing-opsУстановка навыка python-typing-ops в Claude Code (project)
.claude/skills/python-typing-ops/SKILL.md
$ npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops .claude/skills/python-typing-opsУстановка навыка python-typing-ops в Codex
~/.agents/skills/python-typing-ops/SKILL.md
$ npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops ~/.agents/skills/python-typing-opsУстановка навыка python-typing-ops в Gemini CLI
~/.gemini/skills/python-typing-ops/SKILL.md
$ npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops ~/.gemini/skills/python-typing-opsУстановка навыка python-typing-ops в Claude.ai
npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops python-typing-ops && zip -r python-typing-ops.zip python-typing-ops # claude.ai → Customize → Skills → + → Create skill → Upload a skill → python-typing-ops.zip
Автоматические проверки
Запущено 15 нояб. 2026 г.Полный отчёт →Прошёл наши автоматические проверки. Это не аудит безопасности: прочитайте скрипты, прежде чем агент их запустит. Как работают проверки
- Связанный и доступный исходный репозиторий0xdarkmatter/claude-mods/skills/python-typing-ops is public and reachablegithub.com/0xdarkmatter/claude-mods/tree/HEAD/skills/python- ↗Пройдено
- Open source лицензия (OSI)MITspdx.org/licenses/MIT.html ↗Пройдено
- Коммит или релиз за последний годLast commit 2026-11-07github.com/0xdarkmatter/claude-mods/commits ↗Пройдено
- В скриптах нет загрузки с запуском и кражи учётных данных1 script read; no download-and-run, remote eval, base64 execution or credential uploadПройдено
- В SKILL.md нет скрытых инструкцийNo override phrases, safeguard switches, credential requests or hidden charactersgithub.com/0xdarkmatter/claude-mods/blob/HEAD/skills/python- ↗Пройдено
- Заранее разрешённые инструменты ограниченыPre-approved: Read, Writegithub.com/0xdarkmatter/claude-mods/blob/HEAD/skills/python- ↗Пройдено
- SKILL.md соответствует формату Agent SkillsValid name and description; says when to use it; 240 linesgithub.com/0xdarkmatter/claude-mods/blob/HEAD/skills/python- ↗Пройдено
SKILL.md
Открыть на GitHubPython Typing Patterns
Modern type hints for safe, documented Python code.
Basic Annotations
# Variables
name: str = "Alice"
count: int = 42
items: list[str] = ["a", "b"]
mapping: dict[str, int] = {"key": 1}
# Function signatures
def greet(name: str, times: int = 1) -> str:
return f"Hello, {name}!" * times
# None handling
def find(id: int) -> str | None:
return db.get(id) # May return None
Collections
from collections.abc import Sequence, Mapping, Iterable
# Use collection ABCs for flexibility
def process(items: Sequence[str]) -> list[str]:
"""Accepts list, tuple, or any sequence."""
return [item.upper() for item in items]
def lookup(data: Mapping[str, int], key: str) -> int:
"""Accepts dict or any mapping."""
return data.get(key, 0)
# Nested types
Matrix = list[list[float]]
Config = dict[str, str | int | bool]
Optional and Union
# Modern syntax (3.10+)
def find(id: int) -> User | None:
pass
def parse(value: str | int | float) -> str:
pass
# With default None
def fetch(url: str, timeout: float | None = None) -> bytes:
pass
TypedDict
from typing import TypedDict, Required, NotRequired
class UserDict(TypedDict):
id: int
name: str
email: str | None
class ConfigDict(TypedDict, total=False): # All optional
debug: bool
log_level: str
class APIResponse(TypedDict):
data: Required[list[dict]]
error: NotRequired[str]
def process_user(user: UserDict) -> str:
return user["name"] # Type-safe key access
Callable
from collections.abc import Callable
# Function type
Handler = Callable[[str, int], bool]
def register(callback: Callable[[str], None]) -> None:
pass
# With keyword args (use Protocol instead)
from typing import Protocol
class Processor(Protocol):
def __call__(self, data: str, *, verbose: bool = False) -> int:
...
Generics
from typing import TypeVar
T = TypeVar("T")
def first(items: list[T]) -> T | None:
return items[0] if items else None
# Bounded TypeVar
from typing import SupportsFloat
N = TypeVar("N", bound=SupportsFloat)
def average(values: list[N]) -> float:
return sum(float(v) for v in values) / len(values)
Protocol (Structural Typing)
from typing import Protocol
class Readable(Protocol):
def read(self, n: int = -1) -> bytes:
...
def load(source: Readable) -> dict:
"""Accepts any object with read() method."""
data = source.read()
return json.loads(data)
# Works with file, BytesIO, custom classes
load(open("data.json", "rb"))
load(io.BytesIO(b"{}"))
Type Guards
from typing import TypeGuard
def is_string_list(val: list[object]) -> TypeGuard[list[str]]:
return all(isinstance(x, str) for x in val)
def process(items: list[object]) -> None:
if is_string_list(items):
# items is now list[str]
print(", ".join(items))
Literal and Final
from typing import Literal, Final
Mode = Literal["read", "write", "append"]
def open_file(path: str, mode: Mode) -> None:
pass
# Constants
MAX_SIZE: Final = 1024
API_VERSION: Final[str] = "v2"
Quick Reference
| Type | Use Case |
|---|---|
X | None |
Optional value |
list[T] |
Homogeneous list |
dict[K, V] |
Dictionary |
Callable[[Args], Ret] |
Function type |
TypeVar("T") |
Generic parameter |
Protocol |
Structural typing |
TypedDict |
Dict with fixed keys |
Literal["a", "b"] |
Specific values only |
Final |
Cannot be reassigned |
Type Checker Commands
# mypy (run inside the project env)
uv run mypy src/ --strict
# pyright
uv run pyright src/
# In pyproject.toml
[tool.mypy]
strict = true
python_version = "3.11"
Emerging: ty — Astral's Rust-based type checker (same toolchain as uv +
ruff), dramatically faster than mypy. Still in preview (pre-1.0), so mypy or
pyright remain the production default — but worth watching, and easy to try:
uvx ty check. Adopt for new projects once it stabilizes.
Additional Resources
./references/generics-advanced.md- TypeVar, ParamSpec, TypeVarTuple./references/protocols-patterns.md- Structural typing, runtime protocols./references/type-narrowing.md- Guards, isinstance, assert./references/mypy-config.md- mypy/pyright configuration./references/runtime-validation.md- Pydantic v2, typeguard, beartype./references/overloads.md- @overload decorator patterns
Scripts
./scripts/check-types.sh- Run type checkers with common options
Assets
./assets/pyproject-typing.toml- Recommended mypy/pyright config
See Also
This is a foundation skill with no prerequisites.
Related Skills:
python-pytest-ops- Type-safe fixtures and mocking
Build on this skill:
python-async-ops- Async type annotationspython-fastapi-ops- Pydantic models and validationpython-database-ops- SQLAlchemy type annotations
Файлы в этом навыке
9Вопросы о навыке python-typing-ops
Как установить навык python-typing-ops в Claude Code?
Выполните npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops ~/.claude/skills/python-typing-ops. Claude Code загружает навыки из ~/.claude/skills (все проекты) или .claude/skills (один проект) и использует навык, когда его описание соответствует задаче.
Какие клиенты могут использовать навык python-typing-ops?
Любой клиент, который читает формат Agent Skills: Claude Code, Codex, Gemini CLI и claude.ai (загрузить как ZIP). Скрипты в навыке выполняются только там, где клиент разрешает выполнение кода.
Какие версии Python требуются для этих паттернов?
Паттерны используют синтаксис Python 3.10+ (например, синтаксис объединения X | Y), а некоторые специфические конструкции, такие как Self или TypeVarTuple, требуют Python 3.11+.
Как я могу запустить проверку типов в своем проекте?
Вы можете использовать mypy или pyright через uv, например: 'uv run mypy src/ --strict' или 'uv run pyright src/'.
В чем разница между Callable и Protocol для типов функций?
Callable используется для простых типов функций, тогда как Protocol необходим, когда нужно указать именованные аргументы.