Тип белгилери жана статикалык типтештирүү
Кодду текшергич курал ката класстарын программаны иштетүүдөн мурда табышы үчүн аннотация коюңуз
mypy сыяктуу өзүнчө статикалык анализатор ошол белгилерди окуп, дал келбестиктерди программаңызды иштетпестен билдирет. Сиз Python'дун ийкемдүүлүгүн сактап, чоң код базаларына масштабдалуучу компилятор деңгээлиндеги коопсуздук торун аласыз.
- функция жана өзгөрмө аннотацияларын заманбап 3.11+ синтаксиси менен жазуу (
list[int],X | None), typingмодулунан керектүү куралды тандоо (Optional,Callable,Literal,TypedDict,Protocol...),mypyиштетүү жана анын каталарын окуу,TypeVarменен жалпыланган код жанаProtocolменен структуралык интерфейстерди жазуу,- акырындык менен типтештирүүнүн чынчыл сооданы жана белгилер кайсы жерде жардам бербей калаарын түшүндүрүү.
1. Белги — бул метадайын, иштөө учурундагы текшерүү эмес
Тип белгилери жөнүндөгү эң маанилүү факт: CPython аларды текшербейт. Аннотация метадайын катары сакталат жана программа иштеп жатканда башка учурларда эске алынбайт. Чыныгы маани белгиге дал келбегени үчүн эч нерсе ката чыгарбайт.
def double(n: int) -> int:
return n * 2
print(double("ab")) # иштейт: abab деп басып чыгарат
print(double.__annotations__)
# {'n': <class 'int'>, 'return': <class 'int'>}
Белги int дегенде str берүү ката чыгарбайт; "ab" * 2 — туура Python, ошондуктан abab басылат. Белги сунуштама мүнөзүндө. Ал статикалык анализатор аны код иштетилерден мурда окуп: «4-сап int типтүү параметрге str берип жатат» дегенде гана баалуу болот. Бул бөлүнүү — жазуу учурунда аннотациялар, өзүнчө кадам катары текшерүү, иштөө учурунда кадимки динамикалык жүрүм-турум — бүт модель ушул. Аннотациялар __annotations__ ичинде жашайт жана интерпретатордун өзү эмес, куралдар (mypy, pyright, IDE, pydantic, dataclasses) тарабынан колдонулат.