Mengimplementasikan modern Python type hints, structural typing dengan Protocols, dan pola type safety untuk kode yang lebih robust.
- Bintang GitHub
- 81
- File
- 9
- Commit terakhir
- 7 Nov 2026
- Lisensi
- MIT
- Tool yang diizinkan
- 2
Apa fungsi skill python-typing-ops?
python-typing-ops adalah agent skill. Mengimplementasikan modern Python type hints, structural typing dengan Protocols, dan pola type safety untuk kode yang lebih robust.
Ringkasan dibuat dari SKILL.md skill ini.
Tentang skill python-typing-ops
SKILL ini memungkinkan developer untuk mengimplementasikan modern Python type hints dan pola structural typing guna membangun codebase yang aman dan terdokumentasi. SKILL ini menyediakan set tools yang komprehensif untuk menerapkan type annotations, generics, dan structural typing melalui Protocols guna memastikan reliabilitas kode. Saat sebuah agent memuat skill ini, ia dapat men-generate atau melakukan refactor kode menggunakan fitur canggih seperti TypeVar, TypedDict, dan Literal types.
Skill ini mendukung sintaks Python 3.10+ termasuk union types, serta pola spesifik untuk Python 3.11+ seperti Self dan TypeVarTuple. Skill ini juga membantu dalam mengonfigurasi dan menjalankan type checkers seperti mypy dan pyright untuk memvalidasi integritas kode. Dengan memanfaatkan pola-pola ini, developer dapat melangkah lebih jauh dari sekadar anotasi dasar untuk mengimplementasikan logika kompleks seperti TypeGuards untuk type narrowing dan structural typing untuk definisi interface yang fleksibel. Hal ini menjadikannya tool esensial bagi siapa pun yang bertujuan mengurangi runtime errors melalui static analysis.
Apa yang bisa dilakukan agent dengannya
- 1Implement structural typingMendefinisikan sebuah Protocol agar objek apa pun yang memiliki method tertentu dapat dimasukkan ke dalam sebuah fungsi.
- 2Define fixed-key dictionariesMembuat TypedDict untuk memastikan akses dictionary menggunakan key yang spesifik dan type-safe.
- 3Validate code with type checkersMenjalankan command mypy atau pyright untuk memeriksa error tipe pada direktori source.
Ditulis dari SKILL.md milik skill tersebut. Setiap use case diverifikasi dengan kutipan darinya.
Cara install skill python-typing-ops
Setiap perintah menyalin folder skill ke direktori skills client. Restart client atau mulai sesi baru untuk memuatnya.Install skill python-typing-ops di Plugin
/plugin marketplace add 0xDarkMatter/claude-mods /plugin install claude-mods@claude-mods
Install skill python-typing-ops di Claude Code
~/.claude/skills/python-typing-ops/SKILL.md
$ npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops ~/.claude/skills/python-typing-opsInstall skill python-typing-ops di Claude Code (project)
.claude/skills/python-typing-ops/SKILL.md
$ npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops .claude/skills/python-typing-opsInstall skill python-typing-ops di Codex
~/.agents/skills/python-typing-ops/SKILL.md
$ npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops ~/.agents/skills/python-typing-opsInstall skill python-typing-ops di Gemini CLI
~/.gemini/skills/python-typing-ops/SKILL.md
$ npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops ~/.gemini/skills/python-typing-opsInstall skill python-typing-ops di 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
Pengecekan otomatis
Berjalan 14 Nov 2026Laporan lengkap →Lolos cek otomatis kami. Ini bukan audit keamanan: baca skripnya sebelum membiarkan agent menjalankannya. Cara kerja checks
- Source repository terhubung dan dapat dijangkau0xdarkmatter/claude-mods/skills/python-typing-ops is public and reachablegithub.com/0xdarkmatter/claude-mods/tree/HEAD/skills/python- ↗Lolos
- Lisensi open source (OSI)MITspdx.org/licenses/MIT.html ↗Lolos
- Ada commit atau release dalam satu tahun terakhirLast commit 2026-11-07github.com/0xdarkmatter/claude-mods/commits ↗Lolos
- Skrip tanpa unduh-lalu-jalankan atau pencurian kredensial1 script read; no download-and-run, remote eval, base64 execution or credential uploadLolos
- Tidak ada instruksi tersembunyi di SKILL.mdNo override phrases, safeguard switches, credential requests or hidden charactersgithub.com/0xdarkmatter/claude-mods/blob/HEAD/skills/python- ↗Lolos
- Tool yang diizinkan otomatis dibatasiPre-approved: Read, Writegithub.com/0xdarkmatter/claude-mods/blob/HEAD/skills/python- ↗Lolos
SKILL.md
Lihat di 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
Berkas dalam skill ini
9Pertanyaan seputar skill python-typing-ops
Bagaimana cara install skill python-typing-ops di Claude Code?
Jalankan npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops ~/.claude/skills/python-typing-ops. Claude Code memuat skill dari ~/.claude/skills (semua proyek) atau .claude/skills (satu proyek) dan menggunakan skill saat deskripsinya cocok dengan tugas.
Client mana saja yang bisa menggunakan skill python-typing-ops?
Client apa pun yang membaca format Agent Skills: Claude Code, Codex, Gemini CLI, dan claude.ai (unggah sebagai ZIP). Script dalam skill hanya berjalan di client yang mengizinkan eksekusi kode.
Versi Python apa yang dibutuhkan untuk pola-pola ini?
Pola ini menggunakan sintaks Python 3.10+ (seperti sintaks union X | Y), dan beberapa pola spesifik seperti Self atau TypeVarTuple memerlukan Python 3.11+.
Bagaimana cara menjalankan type checker pada proyek saya?
Anda dapat menggunakan mypy atau pyright melalui uv, contohnya: 'uv run mypy src/ --strict' atau 'uv run pyright src/'.
Apa perbedaan antara Callable dan Protocol untuk tipe fungsi?
Callable digunakan untuk tipe fungsi sederhana, sedangkan Protocol digunakan saat Anda perlu menentukan keyword arguments.