A Coding Implementation on Pyright Type Checking Covering Generics, Protocols, Strict Mode, Type Narrowing, and Modern Python Typing

fiverr
A Coding Implementation on Pyright Type Checking Covering Generics, Protocols, Strict Mode, Type Narrowing, and Modern Python Typing
Blockonomics


print(“=” * 62)
print(“SECTION 9 · pyrightconfig.json”)
print(“=” * 62)

config = {
“include”: [“src”],
“exclude”: [“**/__pycache__”],
“pythonVersion”: “3.11”,
“typeCheckingMode”: “strict”,
“reportMissingImports”: “error”,
“reportMissingTypeStubs”: “warning”,
“reportUnknownVariableType”: “warning”,
“reportUnknownMemberType”: “warning”,
“reportUnnecessaryTypeIgnoreComment”: “warning”,
}
cfg_path = os.path.join(WORK, “pyrightconfig.json”)
with open(cfg_path, “w”) as f:
json.dump(config, f, indent=2)
print(f”Written: {cfg_path}”)
print(json.dumps(config, indent=2))
print()

print(“=” * 62)
print(“SECTION 10 · Self, TypeAlias, NewType”)
print(“=” * 62)

write(“s10_modern_types.py”, “””
from typing import Self, TypeAlias, NewType

Binance

class Query:
def __init__(self) -> None:
self._filters: list[str] = []

def where(self, cond: str) -> Self:
self._filters.append(cond)
return self

def build(self) -> str:
return ” AND “.join(self._filters)

class AdvancedQuery(Query):
def order_by(self, col: str) -> Self:
return self

q = AdvancedQuery().where(“age > 18”).order_by(“name”)
reveal_type(q)

Vector: TypeAlias = list[float]
Matrix: TypeAlias = list[Vector]

def dot(a: Vector, b: Vector) -> float:
return sum(x * y for x, y in zip(a, b))

v1: Vector = [1.0, 2.0, 3.0]
v2: Vector = [4.0, 5.0, 6.0]
dot(v1, v2)
dot(v1, [1, 2, 3])

UserId = NewType(“UserId”, int)
OrderId = NewType(“OrderId”, int)

def get_user(uid: UserId) -> str:
return f”user_{uid}”

uid = UserId(42)
oid = OrderId(99)

get_user(uid)
get_user(oid)
get_user(42)
“””)

print(“→ s10_modern_types.py:”)
run_pyright(“s10_modern_types.py”)

print(“=” * 62)
print(“SECTION 11 · reveal_type() & type: ignore”)
print(“=” * 62)

write(“s11_reveal_ignore.py”, “””
from typing import Any

values = [1, “two”, 3.0]
reveal_type(values)

def mystery(x: Any) -> Any:
return x

r = mystery(42)
reveal_type(r)

bad: int = “oops”
bad2: int = “also bad” # type: ignore[assignment]
“””)

print(“→ s11_reveal_ignore.py:”)
run_pyright(“s11_reveal_ignore.py”)

print(“=” * 62)
print(“TUTORIAL COMPLETE”)
print(“=” * 62)
print(“””
Topics covered
──────────────
1 Basic annotations & inference
2 Optional / Union / PEP 604 syntax
3 Type narrowing (isinstance, guards, TypeGuard, match)
4 Generics — TypeVar, Generic, ParamSpec
5 Protocols & structural subtyping
6 TypedDict, dataclasses, NamedTuple
7 Literal, Final, @overload
8 Strict mode
9 pyrightconfig.json
10 Self, TypeAlias, NewType
11 reveal_type() & type: ignore

All source files written to: /tmp/pyright_tutorial/
“””)



Source link

Ledger

Be the first to comment

Leave a Reply

Your email address will not be published.


*