๐ Type Hints โ Best Practices๏
ืืืจื: ืืฉืืจ ืืืืืืช ืืืคืืกืื ืืจืืจื, ืืืงืฉืื ืืืืืืื ืืืืจืื, ืืื ืืืกืชืื ืขื type: ignore.
ืืกืืจืืืื: ืืงืฉืื ืืืจืืชืืช๏
ืืชืืืื ืืืืืืืื ืืจืืืืื (DB, Web) ืืืืกืืคื ืืืคืืกืื ืืจืืจืื ืืคืื ืงืฆืืืช ืฆืืืืจืืืช.
ืืคืื ืืืืืจืืช MyPy ื ืงืืืชืืช ืืืงืื
type: ignoreืืืจืฃ.
ืคืจืืืืงืืืื ืืกืืืืื๏
ืืคืจืืืื ืืืฉืงืึพืืคืขืื (ืืืฉื ืืืกืฃ Mongo) โ ืืืืืจื
Protocolืืื ืืืคืฉืจ ืืืืคื/ืืืงืื ื ืืืกืืื.
from typing import Protocol, Any, Optional
class CollectionLike(Protocol):
def find_one(self, query: dict[str, Any]) -> Optional[dict[str, Any]]: ...
def insert_one(self, doc: dict[str, Any]) -> Any: ...
ืขืืืจ
ObjectId/BSON โ ืืืื ืขื ืืชืืืช ืงืฉื; ืืขืืืคื ืืืคืืกืื ืืืืืื ืขื ืืืืืฆืื ืืงืื.
ืืืืืืืช ืืืงืื๏
ืืคืจืืืงื ืงืืืืื ืคืจืืืืงืืืื ืืืืฉืงื ืืืฉื ืขืงืืืื ืืืืืืืื DB, ืืืฉื ืโ
database/manager.pyื ืฉืขื ืื ืขื ืืชืืืืช ืืจืืจืืช ืืืื ืืงืกืื ืืืคืขืืืืช CRUD. ืืืงืฉืื ืืืืจืืชืืช ืืฉืืจืช ืชืืืืืช ืืกืืื.
ืืืืจืืช MyPy๏
ืืงืืืฅ
mypy.iniืืืืืจ ืืืืืืื ืืกืืืืื (ืืืฉืservices.code_service) ืืืืคืฉืจ ืืืืจื ืืืจืืชืืช.ืืืืืฅ ืืืืกืืฃ ืืืืืืื ืขื
disallow_untyped_defs = Trueืืืืจืื, ืืืืงืืื ืืฆืืฆืignore_missing_importsืืืฉืจ ืืคืฉืจ.
ืืกืืื ืืืืจืฆืื๏
ืืืกืืคื ืืืคืืกืื ืืคืื ืงืฆืืืช ืฆืืืืจืืืช.
ืคืืจืงื ืืืืืืื ืืืจืืืื ืืืฉืชื ืื ืืชืึผืืื.
ืืืืืคื
Anyืืืืคืืกืื ืืืืืงืื ืืืชืจ ืืืฉืจ ืืฉ ืืื ืืืืจืืื ื ืืจืืจ.
ืื ืืืืช ืืกืืื ืื๏
ืื ืชืฉื ื ืืชืืืืช ืงืืืืืช ืืื ืฆืืจื (ืฉืืจ ืชืืืืืช).
ืืืื ืขื ื-
type: ignore; ืืืงืื ืื:ืคืืจืืง ืืืืืืื ืืืจืืืื ืืืฉืชื ืื ืืชืึผืืื
ืฉืืืืฉ ื-
castืืืืงื ืจืง ืืฉืืฉ ืืื ืืืืจืืื ื ืืจืืจ
ืืฉืชืืฉื ื-
Optional[T]ืืฉืขืจื ืขืืื ืืืืืชNone.typing.Anyโ ืฉืืืืฉ ืืืืงืจ ืืืื, ืื ืงืืืช ืงืฆื API ืื ืฆื ืฉืืืฉื.
ืืืืืืืช ืงืฆืจืืช๏
from typing import Optional
def get_username(user_id: int) -> Optional[str]:
user = repo.get(user_id)
return user["name"] if user else None
from typing import cast
value: object = get_value()
config = cast(dict[str, str], value) # ืืืืข ืืืงืืจ ืืคืื ืงืฆืื