Thursday, April 30, 2026

A Coding Implementation on Pyright Sort Checking Overlaying Generics, Protocols, Strict Mode, Sort Narrowing, and Trendy Python Typing


print("=" * 62)
print("SECTION 9 ยท pyrightconfig.json")
print("=" * 62)


config = {
   "embody": ["src"],
   "exclude": ["**/__pycache__"],
   "pythonVersion": "3.11",
   "typeCheckingMode": "strict",
   "reportMissingImports": "error",
   "reportMissingTypeStubs": "warning",
   "reportUnknownVariableType": "warning",
   "reportUnknownMemberType": "warning",
   "reportUnnecessaryTypeIgnoreComment": "warning",
}
cfg_path = os.path.be a part of(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


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


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


       def construct(self) -> str:
           return " AND ".be a part of(self._filters)


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


   q = AdvancedQuery().the place("age > 18").order_by("identify")
   reveal_type(q)


   Vector: TypeAlias = listing[float]
   Matrix: TypeAlias = listing[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() & kind: ignore")
print("=" * 62)


write("s11_reveal_ignore.py", """
   from typing import Any


   values = [1, "two", 3.0]
   reveal_type(values)


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


   r = thriller(42)
   reveal_type(r)


   unhealthy: int = "oops"
   bad2: int = "additionally unhealthy"  # kind: ignore[assignment]
""")


print("โ†’ s11_reveal_ignore.py:")
run_pyright("s11_reveal_ignore.py")


print("=" * 62)
print("TUTORIAL COMPLETE")
print("=" * 62)
print("""
Subjects lined
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
1  Fundamental annotations & inference
2  Non-compulsory / Union / PEP 604 syntax
3  Sort narrowing (isinstance, guards, TypeGuard, match)
4  Generics โ€” TypeVar, Generic, ParamSpec
5  Protocols & structural subtyping
6  TypedDict, dataclasses, NamedTuple
7  Literal, Remaining, @overload
8  Strict mode
9  pyrightconfig.json
10  Self, TypeAlias, NewType
11  reveal_type() & kind: ignore


All supply recordsdata written to: /tmp/pyright_tutorial/
""")

Related Articles

Latest Articles