Python áá¯ááºá¡ááœáẠá¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážá áá áºáá áºáá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá¬ááœáẠDropbox á០áá¯ááºáá±á¬ááºáá²á·áá±á¬ á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážá áá¬áá¬ááŒááºááá¯ááŸá¯á ááááá¡ááá¯ááºážááᯠááá·áºá¡á¬áá¯á¶ááᯠáá»áœááºá¯ááºááá¯á· áááºááŒáá«áááºá
â ááááºá¡ááá¯ááºážáá»á¬áž-
ááá¯ááºáá¬ážáá±á¬ áá¯áẠááá¯ááºážáá±á«ááºáž 4 áááºážá¡áá áá±á¬ááºááŸá
áá±á¬ááºáááºá¡áááá áááºáá±á«áºááŸá¯ (ááŸáá·áº ááŒááºááœááºážááœáẠá á áºáááºážáá±á¬ááºáá°áá°áá»á¬ážááŒá¬ážááœáẠáá¯áááá¡ááŒá áºá¡áá»á¬ážáá¯á¶ážá áá¯ážááááºááŸá¯) ááŸá¬ Dropbox ááœáẠá¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŸá¯áá»á¬ážááŒáá·áº á¡áá»á¯á¶ážáááºáá±á¬ áá¯ááºááá¬áááᯠááá¯ážááŒáŸáá·áºááŒááºážááŒá áºáááºá áá»áœááºá¯ááºááá¯á·ááẠá€ááŒá¿áá¬ááá¯ááŒá±ááŸááºážááẠáá»ááºážáááºááŸá¯áá»á¬ážá áœá¬ááᯠááŒáá¯ážá á¬ážáá²á·ááŒá®ážá ááá¯ááºááŸáááºáá¬ážáá±á¬ codebase áá¡ááœááºá¡á á¬ážááᯠááá¬áá¡ááá¯ááºážááŒá®ážááœá¬ážáá¬á á±ááŒááºážá០static and dynamic automated type inference á¡ááœáẠmypy á¡ááœá²á·áááŒáá¯ážáááºážááŸá¯áá»á¬ážááᯠá¡á¬áá¯á¶á áá¯ááºááŒááºážá¡ááá á¡áá¯á¶ážááœááºá áááºážááẠááá¯ážááŸááºážáá±á¬ á¡ááá¯ááºááááºážáá»á°áá¬áááŸááᯠáááºááá±á¬áºáááºáž áááºážáááºážáá»á¬ážá áœá¬ááᯠáá±á«ááºážá ááºááŒááºážááŒáá·áº á¡ááŸááºá¡áá¬ážááŒá¯áá¬ážáá±á¬ áá¯ááºááá¬áááœáẠá¡ááŸáááºá¡áá¯ááºááŒáá·áº ááá¯ážáááºá¡á±á¬ááºááŒááºááá¯ááºáá²á·áááºá
ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·áá¡ááŒá®ážáá¯á¶áž Python repository (backend code áá«ááŸááá±á¬) ááœáẠááŸááºáá¬ážáá¬ážáá±á¬áá¯ááºááá¯ááºážáá±á«ááºáž 4 áááºážáá®ážáá«ážááŸááááºá static code á
á¬ááá¯ááºááŒááºážáá¯ááºáááºážááᯠáá¯á¶ážááŸá
áºááá·áºá¡ááŒá¬ááœáẠááŒá®ážá
á®ážáá²á·áááºá ááá¯á¡áá« Mypy ááẠá
á¬ááá¯ááºááŒááºážááá¯ážáááºááŸá¯ááᯠá
á±á¬áá·áºááŒáá·áºááẠááá¯ááá¯ááœááºáá°á
á±ááá·áº áá¯ááºááœáŸááºážááŒá¯á¶ááŸá¯á¡á
á®áááºáá¶á
á¬áá»á¬ážááᯠá¡áá»áá¯ážá¡á
á¬ážá¡áá»áá¯ážáá»áá¯ážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá á¡áá°ážáááŒáá·áºá á¥ááá¬á á¡áá»áá¯ážá¡á
á¬ážáá
áºáá¯á ááŒááºááŒááºáá¬ážáá¬ážá¡áá¯á¶ážááŒá¯ááŸá¯áá²á·ááá¯á·áá±á¬ á¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááœáẠááá±áá¬áá±á¬ áá¯ááºááá¯ááºáᬠá¡á
á®áááºáá¶á
á¬áá»á¬ážááᯠáá¯ááºáá¯ááºááá¯ááºááẠAny
á¡áááºáááŒá¯ááá¯ááºáá±á¬ ááŸááºá
á¬áá»á¬ážááœáẠááá¯á·ááá¯áẠá¡áá»áá¯ážá¡á
á¬áž ááŸááºá
á¬áá»á¬ážááá«áá±á¬ ááŒááºáá¡ááœá²á·á¡á
ááºáž á
á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠáááºááœááºážááŒááºážáá²á·ááá¯á·áá±á¬ á¡áá¬áá»á¬ážááŒáá·áºá Dropbox ááœáẠá¡áá»áá¯ážá¡á
á¬ážá
á
áºáá±ážááŒááºážá áááá»ááŸá¯ááᯠááŒáŸáá·áºáááºááẠááá±á¬áá»ááºáá
áºáá¯á¡áá±ááŒáá·áºá áááá¯áá»á¯ááºááá¯ááºáá¬ážáá±á¬ Python repository ááŸá áá°ááŒáá¯ááºáá»á¬ážáá±á¬ open source á
á¬ááŒáá·áºááá¯ááºá¡áá»áá¯á·á¡ááœáẠá¡áá»áá¯ážá¡á
á¬áž á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºáá»á¬áž (stub ááá¯ááºáá»á¬áž) ááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠáá¶á·ááá¯ážáá±ážáá²á·áá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠá¡áá»áá¯á·áá±á¬ Python áá¯á¶á
á¶áá»á¬ážá¡ááœáẠááá¯ááá¯áááá»áá±á¬á¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááᯠááœáá·áºááŒá¯áá±ážááá·áº á¡áá»áá¯ážá¡á
á¬ážá
áá
áºá á¡ááºá¹áá«áááºá¡áá
áºáá»á¬áž (áá±á¬ááºáááºááœá² PEPs áá»á¬ážááœáẠá
á¶áááºááŸááºáá¬ážáááº) ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááºá á€áááºááááºááŸá¬ážáá±á¬á¥ááá¬áá
áºáá¯ááŒá
áºáááºá TypeDict
JSON áá²á·ááá¯á·áá±á¬ á¡áááá¬ááºáá»á¬ážá¡ááœáẠá¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá±á¬á áá
áºáá¯á
á®ááẠáááºážáááá¯ááºááá¯ááºá¡áá»áá¯ážá¡á
á¬ážáááºááá¯ážáá
áºáá¯á
á®ááŸá string key á¡á
á¯á¶áá«ááŸááá±á¬ á¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááŒá
áºáááºá á¡áá»áá¯ážá¡á
á¬áž á
áá
áºááᯠáááºááẠááá¯ážáá»á²á·ááœá¬ážáá«áááºá áá»áœááºá¯ááºááá¯á·á áá±á¬ááºáá
áºááá·áºááŸá¬ Python á ááááºážááá¬ááºážá
áœááºážáááºáá»á¬ážááᯠááŒáŸáá·áºáááºááẠááŒá
áºááá¯ááºááŒá±ááŸááááºá
á¡ááŸááºá¡áá¬ážááŒá¯áá¯ááºá ááá¯ááºážá¡áá±á¡ááœááº- áá¬áá¬
ááŸááºáá¬ážáá¬ážáá±á¬ áá¯ááºá ááá¯ááºážá¡áá±á¡ááœááº- ááá¯ááºáž
ááŸááºáá¬ážáá¬ážáá±á¬ áá¯ááºááá¯ááºážáá»á¬ážá á
á¯á
á¯áá±á«ááºáž á¡áá±á¡ááœááº
á€áááºááŸá¬ Dropbox ááœáẠááŸááºá á¯ááŒá¯áá¬ážáá±á¬ áá¯ááºááá¬áááᯠááá¯ážááŒáŸáá·áºáááºá¡ááœáẠáá»áœááºá¯ááºááá¯á·áá¯ááºáá±á¬ááºáá²á·ááá·áºá¡áá¬áá»á¬ážá á¡áááá¡ááºá¹áá«áááºáá»á¬ážá¡ááŒá±á¬ááºáž ááŒá¯á¶áá¯á¶áá¯á¶ážáááºáá»ááºááŒá áºáááºá
ááŸááºáá»áẠááá¯ááºáá¬ááŸá¯á áá¯ááºá¡áá áºáá»á¬ážááᯠááŸááºáá¬ážááŒááºážá¡ááœáẠááá¯á¡ááºáá»ááºáá»á¬ážááᯠáááŒááºážááŒááºáž ááá¯ážááŒáŸáá·áºáá¬ážáá«áááºá á¡áá»áá¯á·áá±á¬ ááŸááºá á¬áá»á¬ážáá«ááŸáááŒá®ážáá¬áž ááá¯ááºáá»á¬ážááá¯á· ááŸááºá á¬áá»á¬ážááá·áºááẠá¡ááŒá¶ááŒá¯ááá·áº linter á¡ááŒá¶ááŒá¯áá»ááºáá»á¬ážááŒáá·áº á áááºáá²á·áááºá ááᯠáá»áœááºá¯ááºááá¯á·ááẠPython ááá¯ááºá¡áá áºáá»á¬ážááŸáá·áº ááŸáááŒá®ážáá¬ážááá¯ááºá¡áá»á¬ážá á¯ááœáẠá¡áá»áá¯ážá¡á á¬ážááŸááºáá»ááºáá»á¬ážááᯠááá¯á¡ááºáá«áááºá
á á¬ááá¯ááºá¡á á®áááºáá¶á á¬áá»á¬ážá áá»áœááºá¯ááºááá¯á·ááẠá¡ááœá²á·áá»á¬ážá¡á¬áž áááºážááá¯á·ááá¯ááºááœáẠá á¬ááá¯ááºááŒááºážá¡ááá·áºááŸáá·áº áááºáááºá á¡áááºá áẠá¡á á®áááºáá¶á á¬áá»á¬áž áá±ážááá¯á·ááŒá®áž ááŸááºáá¬ážáá¬ážááá·áºáááºáá»á¬ážááᯠáŠážá áœá¬ á¡ááŒá¶áá¬ááºáá±ážáá«áááºá
mypy ááá»á±á¬áºááŒá¬ážááŸá¯á áá»áœááºá¯ááºááá¯á·ááẠááœá²áá»á¬ážááœáẠmypy á¡ááŒá±á¬ááºáž ááŒá±á¬ááá¯ááŒááŒá®áž á¡áá»áá¯ážá¡á á¬áž ááŸááºáá»ááºáá»á¬ážááᯠá áááºááẠáá°áá®áááºá¡ááœáẠá¡ááœá²á·áá»á¬ážááŸáá·áº ááœá±ážááœá±ážáá«á
ááá¹áááœá±á áá»áœááºá¯ááºááá¯á·ááẠá¡áááááŒá¿áá¬áá»á¬ážááᯠáá±á¬áºáá¯ááºááẠá¡áá»áááºá¡áá«á¡ááá¯áẠá¡áá¯á¶ážááŒá¯áá°á á áºáááºážáá»á¬ážááᯠááŒá¯áá¯ááºáá«áááºá á€ááŒá¿áá¬áá»á¬ážááá¯ááŒá±ááŸááºážáá¬ááœááºá¡áá±á¬áºáá±ážáá±ážáá±ážááœá¬ážáááºá¡áááºááá·áºááŒá áºáá±áá«ááŒá® ( mypy ááá¯á¡ááŸáááºááŒáŸáá·áºáááºáá¬áá¬á áá¬ážá¡áá áºáá áºáá¯áááºáá®ážááŒááºážáááºá)
á áœááºážáá±á¬ááºáááºá daemon ááŸáá·áº mypyc ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº mypy áá áœááºážáá±á¬ááºáááºááᯠáá»á¬ážá áœá¬ááŒáŸáá·áºáááºáá¬ážáá«áááºá ááŸááºáá»ááºáá±ážááŒááºážáá¯ááºáááºážá ááºá¡ááœááºáž ááŒá áºáá±á«áºáá¬áá±á¬ á¡áááºáááŒá±ááŸá¯áá»á¬ážááᯠááŒá±áá»á±á¬á·á á±áááºááŸáá·áº áá¯ááºá¡áá»á¬ážá¡ááŒá¬ážááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºá á±ááẠáááºážááᯠáá¯ááºáá±á¬ááºáá²á·ááŒááºážááŒá áºáááºá
áááºážááŒááºáá°áá»á¬ážááŸáá·áº áá±á«ááºážá ááºááŒááºážá áá»áœááºá¯ááºááá¯á·ááẠDropbox ááœááºáá±áááºážá á¬ážáá±á¬ áááºážááŒááºáá°áá»á¬ážááœáẠmypy áá¯ááºáá±á¬ááºááŒááºážááᯠáá¶á·ááá¯ážááẠáááááá¬áá»á¬ážááᯠáááºáá±á¬ááºáá¬ážáá«áááºá áááºážááœáẠPyCharmá Vim ááŸáá·áº VS Code ááá¯á·áá«áááºáááºá áááºážááẠáá¯ááºá¡ááŸááºá¡áá¬ážááŒá¯ááŒááºážááŸáá·áº áááºážááá¯ááºáá±á¬ááºááá¯ááºá áœááºážááᯠá á áºáá±ážááŒááºážáá¯ááºáááºážá ááºááᯠá¡ááœááºááá¯ážááŸááºážá á±áááºá ááŸáááŒá®ážáá¬ážáá¯ááºááᯠá¡ááŸááºá¡áá¬ážááŒá¯ááá·áºá¡áá« á€áá¯ááºáá±á¬ááºáá»ááºá¡áá»áá¯ážá¡á á¬ážáá»á¬ážááẠá¡áá»á¬ážá¡á¬ážááŒáá·áºááŒá áºáááºá
á¡ááŒáááºááá±á áá»áœááºá¯ááºááá¯á·ááẠáááºááŒáááºááŸá¯ááœá²ááŒááºážá áááºááŒá¬ááŸá¯áááááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºáá±á¬ááºáá»ááºáááºááŸááºáá»á¬ážááᯠáá±á¬ááºáá»ááºáá»ááẠáááááá¬áá áºáá¯ááᯠáááºáá®ážáá²á·áááºá á€áááááá¬ááẠááá¯ážááŸááºážáá±á¬á¡ááŒá±á¡áá±áá»á¬ážááœááºáᬠáá¯ááºáá±á¬ááºááá¯ááºáá±á¬áºáááºáž á¡á¬ážá áá¯ááºáá¯ááºááŸá¯áá»á¬ážá áœá¬áááŸááá² áá»áœááºá¯ááºááá¯á·ááá¯ááºá¡áá»áá¯ážá¡á á¬ážááœáŸááºážááŒá¯á¶ááŸá¯ááᯠááá¯ážááŒáŸáá·áºááá¯ááºá á±ááẠáá°áá®áá±ážáá²á·áááºá
ááŒááºáá¡ááœá²á·á¡á
ááºážá
á¬ááŒáá·áºááá¯ááºáá»á¬ážá¡ááœááºáá¶á·ááá¯ážááŸá¯á áá»áœááºá¯ááºááá¯á·áááá±á¬áá»ááºáá»á¬ážá
áœá¬ááẠSQLAlchemy toolkit ááá¯á¡áá¯á¶ážááŒá¯áááºá PEP 484 á¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááẠááá¯ááºááá¯ááºáá¯á¶á
á¶áááŒááá¯ááºáá±á¬ Python á áááºááŒáœáá±á¬á
áœááºážáááºáá»á¬ážááᯠá¡ááœáá·áºáá±á¬ááºážáá°áááºá PEP 561 á¡á áá»áœááºá¯ááºááá¯á·ááẠáááºááá¯ááºáᬠstub ááá¯ááºááᯠáááºáá®ážááŒá®áž mypy á¡ááœáẠplugin áá
áºáᯠáá±ážáá¬ážáá²á·ááẠ(
á¡áááºá¡áá²ááœá± ááŒá¯á¶áá²á·ááááºá
ááá¯ááºááŸáááºáá¬ážáá±á¬ áá¯ááºááá¯ááºážáá±á«ááºáž 4 áááºážááá¯á· áááºážááŒá±á¬ááºážááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠá¡ááŒá²áááºáž áááœááºáá°áá«á áá®áááºážááŸá¬ áá±á«ááºáá±á«ááºááœá± á¡áá»á¬ážááŒá®áž ááŒá¯á¶áá²á·áááŒá®áž á¡ááŸá¬ážá¡ááœááºážááœá± á¡áá»á¬ážááŒá®áž áá¯ááºáá²á·áááºá áá«ááœá±á áá»áœááºáá±á¬áºááá¯á· ááŒá¯á¶ááœá±á·áá±ááá²á· ááŒá¿áá¬ááá»áá¯á·áá«á áááºážááá¯á·á¡ááŒá±á¬ááºážááŒá±á¬ááŒááŒááºážá á¡ááŒá¬ážá¡áá¬ážáá°ááŒá¿áá¬áá»á¬ážááᯠááŸá±á¬ááºááŸá¬ážááá¯ááºáááºáᯠáá»áœááºá¯ááºááá¯á·áá»áŸá±á¬áºááá·áºáá«áááºá
ááá¯ááºáá»á¬ážáá»á±á¬ááºáá±áááºá ááá¯ááºá¡áááºážáááºááá¯áᬠá
á
áºáá±ážááŒááºážááŒáá·áº áá»áœááºá¯ááºááá¯á·ááá¯ááºáááºážááᯠá
áááºáá²á·áá«áááºá á€ááá¯ááºáá»á¬ážááœáẠááá«áááºááá·áº áááºááá·áºá¡áá¬ááá¯áááᯠá
á
áºáá±ážááá¬ážáá«á áááºážááá¯á·ááœáẠááááá¯á¶áž ááŸááºá
á¬áá»á¬áž áá±á«áºáá¬áá±á¬á¡áá«ááœáẠááá¯ááºáá»á¬ážááᯠá
áááºáááºááŒááºážá
á¬áááºážááá¯á· ááá·áºááœááºážáá²á·áááºá á¡áááºá á¡áááºááŒá¯ááŒááºážáá±á¬ááºá¡ááŒááºáááºááŸá áá±á¬áºáá»á°ážáá
áºáá¯á០áá
áºá
á¯á¶áá
áºáá¯ááᯠáááºááœááºážáá²á·áá«áá áá»áœááºá¯ááºááá¯á·ááẠáá²á·ááá¯á·áá±á¬ áááºááá¯ážáá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºááŒááºážá¡ááŒá±á¬ááºáž ááŒá±á¬áá±áá«áááºá Any
áá¯á¶ážá áá
ááºážáááºááá±ážáá±á¬á á¡áá°ážáááŒáá·áº ááœáŸá±á·ááŒá±á¬ááºážááŒááºážá á¡á
á±á¬ááá¯ááºážá¡ááá·áºáá»á¬ážááœáẠá
á¬ááá¯ááºáááá»ááŸá¯ áááááá¬áᬠáá¯á¶ážááŸá¯á¶ážááœá¬ážá
á±áááºá áá¯á¶ááŸááºá¡ááŒá±á¡áá±áá
áºáá¯á áá¯á¶ážáááºáá»ááºááááºáááºááœáẠááá¯ááºáá»á¬ážááá·áºááŒááºážááẠcodebase á á¡ááŒá¬ážá¡á
áááºá¡ááá¯ááºážáá»á¬ážááœáẠááŒá¿áá¬áá»á¬ážááᯠáááºááŸá¬ážá
á±áá±á¬áºáááºážá á€áá»ááºážáááºáááºážááẠááá¯á¡áá»áááºá¡áá á¡á¶á·á¡á¬ážááá·áºá
áá¬áá±á¬ááºážáá±á¬ááºá¡á±á¬áẠáá±á¬ááºážá
áœá¬á¡áá¯ááºáá¯ááºáá±áá«áááºá á¡ááá¯ážáá¯á¶ážááŸá¬á áá®ážááŒá¬ážááœá²áá¬ážáá±á¬ áá¯ááºááŸá
áºáá¯ááᯠáá±á«ááºážá
ááºážááá¯ááºáá±á¬á¡áá«á áá
áºáá¯ááŸáá·áºáá
áºáᯠáá®ážááŒá¬ážááœá²ááá¬ážáá±á¬ á¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááᯠá
á
áºáá±ážááŒá®ážáá±á¬á¡áá«ááœáẠá¡ááá¯áá«á§áááá¬áá»á¬ážá á¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááẠáá
áºáá¯ááŸáá·áºáá
áºáᯠáááá¬ááááŒá
áºááŒá±á¬ááºáž ááœááºáá±á«áºáá¬áááºá ááá¯á·ááŒá±á¬áá·áº ááŸááºáá»ááºáá»á¬ážááᯠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážá
áœá¬ ááŒá¯áá¯ááºááẠááá¯á¡ááºáá¬áááºá ááá¯ááŒááºááŒáá·áºáá»áŸáẠmypy áá¡áá»áá¯ážá¡á
á¬ážá
á
áºáá±ážááá·áºáá±áá¬ááá¯á· core library modules áá»á¬áž á¡ááŒááºááá·áºááá·áºáááºááá¯áá»áœááºá¯ááºááá¯á·ááá±á¬áá±á«ááºáá«áááºá áá«á áá»áœááºáá±á¬áºááá¯á·áá²á· áá¯ááºáááºážááᯠááá¯ááŒá®áž ááá·áºááŸááºážááá¯ááºá
á±ááŸá¬áá«á
áá¯ááºáá±á¬ááºážááᯠááŸááºáá¬ážááŒááºážá á áááºáá±á¬á¡áá«ááœááºá áá»áœááºá¯ááºááá¯á·ááœáẠááŸáááŒá®ážáá¬áž Python áá¯ááºááá¯ááºážáá±á«ááºáž 4 áááºážááá·áºááŸááááºá á€áá¯ááºá¡á¬ážáá¯á¶ážááᯠááŸááºáá¬ážááŒááºážááẠááœááºáá°áá±á¬á¡áá¯ááºááá¯ááºááŒá±á¬ááºáž áááºááŸá¬ážáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠá ááºážáááºááŸá¯áá»á¬ážáá¯ááºáá±á¬ááºáá±á ááºááœáẠá¡áá»áá¯ážá¡á á¬ážá¡áá»ááºá¡áááºááᯠá á¯áá±á¬ááºážááá¯ááºááŒá®áž á á¯áá±á¬ááºážáááŸááá¬ážáá±á¬ á¡áá»ááºá¡áááºáá±á«áºá¡ááŒá±áá¶á áááºááá¯ááºááá¯á· á¡áá»áá¯ážá¡á á¬ážááŸááºáá»ááºáá»á¬ážááᯠááá·áºááœááºážááá¯ááºááá·áº PyAnnotate áá¯áá±á«áºáá±á¬ áááááá¬áá áºáá¯ááᯠáááºáá®ážáá¬ážáá«áááºá ááá¯á·áá±á¬áºá á€áááááá¬ááᯠá¡áá°ážáá»ááºááŒáá·áºá áœá¬ áááºáá¶áá»áá·áºáá¯á¶ážáááºááᯠáá»áœááºá¯ááºááá¯á· ááááááŒá¯áááá«á á¡áá»áá¯ážá¡á á¬áž á¡áá»ááºá¡ááẠá á¯áá±á¬ááºážááŒááºážááŸá¬ ááŸá±ážááœá±ážááŒá®áž á¡ááá¯á¡áá»á±á¬áẠáá¯ááºáá±ážááá·áº ááŸááºá á¬áá»á¬ážááẠááá¯ááºááá¯áẠáááºážááŒááºááŸá¯áá»á¬ážá áœá¬ ááá¯á¡ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºááá¯á á áºáá±ážááá·áºá¡áá«ááá¯ááºáž ááá¯á·ááá¯áẠá¡ááŸááºááááºááœááºáááºáá±á¬ááºážááá¯ááŸá¯áá»á¬ážá ááá¬áá¡áááºážáááºááᯠááœá²ááŒááºážá áááºááŒá¬ááŒááºážá¡áá±á«áº á¡ááŒá±áá¶á á¡áá»áá¯ážá¡á á¬ážá¡áá»ááºá¡áááºááᯠá á¯áá±á¬ááºážááá·áºá¡áá«ááá¯ááºáž á€áááááá¬ááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááẠáá»áœááºá¯ááºááá¯á· á ááºážá á¬ážáá¬ážáá±á¬áºáááºáž áá»ááºážáááºááŸá¯ááŸá¬ á¡áá¹ááá¬ááºáá»á¬ážááœááºážáá±á¬ááŒá±á¬áá·áº ááá¯ááºááẠáá¯á¶ážááŒááºáá²á·áááºá
ááááºá¡áá±ááŒáá·áºá áá¯ááºá¡áá»á¬ážá á¯ááᯠáááºážáááá¯ááºááŸááºáá»á¬ážá ááá¯ááºááá¯ááºááŸááºáá°áá¬ážáááºáᯠááŸááºáá¬ážááá¯ááºáá«áááºá á€áá¯ááºáááºážá ááºááᯠáááºážááŒá±á¬ááºážááŸááºááá¯á· áááºážááœáŸááºááá¯ááºáááºá á¡áá°ážá¡áá±ážááŒá®ážáá±á¬ module áá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááŸááºáá¬ážáá¬ážááẠááá¯á¡ááºááá·áº á¡á á®áááºáá¶á á¬áá»á¬ážááᯠááŒááºáááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá±áá¬áá¬ááŸáá·áºáá»á®á¡áá¯á¶ážááŒá¯ááá·áº á á¬ááŒáá·áºááá¯áẠmodule áá áºáá¯á¡ááœáẠá¡áá»áá¯ážá¡á á¬ážááŸááºáá»ááºáá»á¬ážááᯠáá±ážáá±á¬ááºááẠá¡áá±ážááŒá®ážáá«áááºá áá«áá±ááá·áº á¡áá áºáá áºáá¯áá²á· á¡á á¬ážááá¯ážááá¯ááºáá²á· áááºáá±á¬ááºááŸá¯áá±á¬ááºážááᯠááŸááºáá¬ážááá¯á· ááááºá¡áá±ážáááŒá®ážáá±á¬á·áá«áá°ážá á¡ááœá±áááºáá¶áá¯ááºá¡ááœáẠá¡áá»áá¯ážá¡á á¬ážááŸááºá á¬áá»á¬ážáá¯ááºáá±ážááẠstatic ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááᯠá¡áá¯á¶ážááŒá¯ááááºáž á ááºážáááºáá±áá«áááºá
á ááºáá®ážáááºááœááºážááŸá¯á á¡áááºááœááºá áá»áœááºá¯ááºááẠmypy ááᯠá¡ááŸáááºááŒáŸáá·áºááẠáááºáá²á á±ááá·áº áááºááŸáááŸá¯ (âááŸá®ááá¯ááŸá¯ááá¯ááºáᬠá¡ááŸá¯ááºá¡ááœá±ážáá»á¬ážâ) á¡ááŒá±á¬ááºáž ááŒá±á¬ááá¯áá²á·áááºá á€á ááºáá®ážá á®ážáááºááœááºážááŸá¯ááŒá±á¬áá·áº ááŒá áºáá±á«áºáá¬áá±á¬ mypy idiom á¡áá»áá¯ážáá»áá¯ážááᯠáá¶á·ááá¯ážáá°áá®áááºáááºáž áá»áœááºá¯ááºááá¯á· ááŒáá¯ážá á¬ážá¡á¬ážáá¯ááºáá²á·ááá«áááºá áááŒá¬áá±ážáá®á áá»áœááºá¯ááºááá¯á·ááẠááŒáá¯á·áááºááá¬ážáááºááœááºážááŸá¯ááŸáá·áºáááºáááºááŒá®áž mypy áááŒá¿áá¬á¡áá»á¬ážá á¯ááᯠááŒá±ááŸááºážáá±ážááá·áº á¡áááá áá áºááŒááºáááºáá®ááá¯ááºážááá±á¬áá»ááºáá áºáá¯ááᯠááŒá®ážááŒá±á¬ááºáá²á·áááºá á€ááŒá¿áá¬áá»á¬ážááẠááá±á¬áá»ááºáá¡á á±á¬ááá¯ááºážáá¬áááŸá áááºá mypy ááá±á¬áá»ááºááᯠáá°áá¡á¬áá¯á¶á áá¯ááºáá²á·ááá·áº ááá¬áá±ážááá¯ááºáá¬áá¬áá¬á áá¬ážááŒá áºáá±á¬ Alore á០ááŒá áºáá±á«áºáá¬ááŒááºážááŒá áºáááºá Alore syntax ááẠcyclic import commands áá»á¬ážááŒáá·áº ááŒá¿áá¬áá»á¬ážááᯠááŒá±ááŸááºážááẠááœááºáá°á á±áááºá áá±ááºáá® mypy ááẠáááºážáá¡á á±á¬ááá¯ááºážá ááá¯ážááŸááºážáá±á¬á áááºáá¬ážá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á០ááá·áºáááºáá»ááºá¡áá»áá¯á·ááᯠá¡ááœá±áááºáá¶áá²á·ááẠ(Alore á¡ááœáẠá¡ááœááºááá·áºáá»á±á¬áºáááº)á á¡áááá¡á¬ážááŒáá·áº á¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááẠáááŸááºážáááºážáá±á¬ááŒá±á¬áá·áº Python ááẠááŒáá¯á·áááºááá¬ážáááºááœááºážááŸá¯ááŸáá·áº á¡áá¯ááºáá¯ááºáá¬ááœáẠáááºáá²á á±áááºá á¥ááá¬á¡á¬ážááŒáá·áºá assignment operation áá áºáá¯ááẠá¡áá»áá¯ážá¡á á¬áž alias ááᯠá¡ááŸááºáááẠáááºááŸááºááá¯ááºáááºá áááºááœááºážááŸá¯ááœááºážáááºá¡áá»á¬ážá á¯ááᯠááá¯ááºáá±á¬ááºááá»ááºáž Mypy ááẠá€áá²á·ááá¯á·áá±á¬á¡áá¬áá»á¬ážááᯠá¡ááŒá²áááºážááŸá¬ááœá±ááœá±á·ááŸáááá¯ááºáááºááá¯ááºáá±á Alore ááœáẠááá¯ááá¯á·áá±á¬ ááŸá¯ááºááœá±ážááŸá¯áá»á¬áž áááŸááá«á á áá áºááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ á¡á á±á¬ááá¯ááºážá¡ááá·áºááœáẠááŒá¯áá¯ááºáá²á·áá±á¬ áá¶á·áá»ááºážáá±á¬ áá¯á¶ážááŒááºáá»ááºáá»á¬ážááẠáá±á¬ááºááŸá áºáá»á¬ážá áœá¬ááŒá¬ááŒá®ážáá±á¬áẠáááá¯ááááºáá¬á¡ááœáẠáááŸá áºááŒáá¯á·ááœáẠá¡á¶á·ááŒááœááºááŒá áºá á±ááá¯ááºáááºá
ááááºáá»á¬áž- áá¯ááºááá¯ááºáž á áááºážááŸáá·áº ááá¯ážáá¯ááºá ááºááá¯ááºážá¡áá áºáá»á¬ážááá¯á· áááºážááŒá±á¬ááºáž
mypy ááá±á¬áá»ááºááẠá¡á á±á¬ááá¯ááºáž ááŸá±á·ááŒá±ážáá¯á¶á á¶áá»á¬ážá០áá¯ááºáá¯ááºááŸá¯áá¯ááºá¡áá»áá¯ážá¡á á¬áž ááá¯ááºážáá±á«ááºáž 4 áááºážááᯠááááºážáá»á¯ááºááá·áº á áá áºá¡áá ááŸááºáá»á¬ážáá¬áá²á·áááºá mypy ááá¯ážáááºáá¬áááºááŸáá·áºá¡áá»áŸ Python á á¡áá»áá¯ážá¡á á¬áž á¡ááááºá¡ááŒáœááºáá»á¬ážááᯠá á¶ááŒá¯áá²á·áááºá ááá±á·áá±ááºááœáẠPython áá¯ááºááá¯ááºááŒááºážá¡ááœáẠá¡á¬ážáá±á¬ááºážááá·áº áá±áá áá áºáá áºáᯠááœá¶á·ááŒáá¯ážáá¬áá²á·áááºá áááºážááœáẠá á¬ááŒáá·áºááá¯áẠáá¶á·ááá¯ážááŸá¯ á¡ááœáẠáá±áá¬áá áºáᯠááŸáááŒá®ážá áááºážááœáẠIDE áá»á¬ážááŸáá·áº áááºážááŒááºáá°áá»á¬áž á¡ááœáẠá¡áááºáááááá¬áá»á¬áž áá«áááºáááºá áááºážááœáẠá¡áá»áá¯ážá¡á á¬áž ááááºážáá»á¯ááºááŸá¯ á áá áºáá»á¬ážá áœá¬ áá«ááŸááááºá áá áºáá¯á á®ááœáẠáááºážá á¡á¬ážáá¬áá»áẠá¡á¬ážáááºážáá»ááºáá»á¬áž ááŸááááºá
á¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážááᯠDropbox ááœááºáá±ážáá¬ážááŒá®ážááŒá áºáá±á¬áºáááºážá áá»áœááºá¯ááºááá¯á·ááẠPython áá¯ááºááá¯ááá¯ááºááá·áºá¡á á±á¬ááá¯ááºážáá¬áááœááºááŸááá±ážáááºáᯠáá»áœááºá¯ááºáá¯á¶ááŒááºáá«áááºá á¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážáááºážááá¬áá»á¬ážááẠáááºáááºááá¯ážáááºááŒá®áž ááá¯ážáááºáá±áááºáᯠáá»áœááºáá±á¬áºáááºáá«áááºá
áááºáá¡ááŒá®ážá á¬áž Python ááá±á¬áá»ááºááœáẠá á áºáá±ážááŒááºážá¡áá»áá¯ážá¡á á¬ážááᯠáááºá¡áá¯á¶ážáááŒá¯áá±ážáá«áá ááá¯á¡áá»áááºááẠstatic typing ááá¯á·á áááºááẠá¡ááœááºáá±á¬ááºážáá±á¬á¡áá»áááºááŒá áºááŒá±á¬ááºáž áááá¬ážáá«á á¡áá¬ážáá° á¡áá°ážá¡ááŒá±á¬ááºáž áá¯ááºáá¬ážáá²á·áá°ááœá±áá²á·áááºáž á áá¬ážááŒá±á¬áá°ážáááºá áá°ááá¯á·áá²á áá áºáá±á¬ááºá០áá±á¬ááºááááá²á·áá°ážá á¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážááᯠPython ááẠ"áá¯á¶ááŸáẠPython" ááẠááŒá®ážáá¬ážáá±á¬ ááá±á¬áá»ááºáá»á¬ážááᯠáá±á¬áºáá±á¬ááºáááºá¡ááœáẠááá¯ááá¯ááá·áºáá»á±á¬áºáá±á¬ áá¬áá¬á áá¬ážáá áºáᯠááŒá áºá á±áááºá
áá»á áºáááºááá«áá±á¬á á¬áááºáá°áá»á¬áž! áááºá Python ááá±á¬áá»ááºáá»á¬ážááœáẠá¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážááᯠáááºá¡áá¯á¶ážááŒá¯áá«ááá¬ážá
source: www.habr.com