আগের Function lesson -> int-এর মতো একটা মৌলিক type hint ব্যবহার করেছিল। এই lesson পূর্ণ typing system কভার করে — Python নিজে থেকে কখনো runtime-এ এগুলো enforce করে না, কিন্তু এগুলো উদ্দেশ্য document করে আর কোড আসলে চলার আগেই একটা আলাদা tool-কে আসল ভুল ধরতে দেয়।
def greet(name: str) -> str:
return f'Hello, {name}!'
age: int = 28
price: float = 19.99
is_active: bool = Truenames: list[str] = ['Sam', 'Alex']
scores: dict[str, int] = {'Sam': 90, 'Alex': 85}
coordinates: tuple[float, float] = (12.5, 45.2)from typing import Optional
def find_user(user_id: int) -> Optional[str]:
# একটা username return করে, বা না পাওয়া গেলে None
...
# Python 3.10+ shorthand, কোনো import দরকার নেই:
def find_user(user_id: int) -> str | None:
...def process(value: int | str) -> str:
return str(value)from typing import Callable
def apply(func: Callable[[int], int], value: int) -> int:
return func(value)Python নিজে চলার সময় কখনো এই hint-গুলো check করে না — আলাদাভাবে চালানো mypy, কোড আসলে চলার আগেই একটা mismatch ধরে।
pip install mypy
mypy my_script.py
# my_script.py:5: error: Argument 1 to "greet" has incompatible type "int"; expected "str"| Hint | মানে |
|---|---|
| list[str] | শুধু string ধারণ করা একটা list |
| dict[str, int] | string key আর integer value সহ একটা dict |
| Optional[str] / str | None | একটা string, বা None |
| int | str | হয় একটা int বা একটা string |
| Callable[[int], int] | একটা int নেওয়া আর একটা int return করা একটা function |
Python নিজে আসলে এগুলো দিয়ে কী করে
Type hint optional documentation, enforcement না — একটা "ভুল" type দিয়ে কোড চালানো এখনো ঠিকঠাক কাজ করে যতক্ষণ না mypy-র মতো কিছু আলাদাভাবে check করার জন্য চালানো হয়। এগুলোর value runtime-এর আগে বাস্তব একটা category-র bug ধরা, আর যে কেউ এটা পড়ছে তার কাছে একটা function-এর প্রত্যাশিত input স্পষ্ট করা।