Já se nestačím divit. Problém je evidentně v tom, že někdo se Python snaží používat jako Javu a dělá zjevné nesmysly, kterým ho naučil tento jazyk. Problém není v Pythonu, ale v tom, že dotyčný Python neumí používat. Ale samozřejmě je jednoduší nadávat na jazyk, než se zamyslet sám nad sebou a tím, co dělám špatně. Za celou svou dlouhou a bohatou praxi jsem nemě problém s cyklickým importem, dokonce jsem ani nevěděl, že nějaký tákový problém existuje, i literatura o tom mlčí a nevaruje před tím. Jak je to možné? Prostě Python nepoužívám jako Javu.
Ale děkuji vám, konečně jsem pochopil, co znamená 'Thinking In Python'. Jestli chcete používat Python, pak se naučte myslet v Pythonu, naučte se myslet dynamicky.
Pravděpodobně to nedokážete, jako levičák nedokáže myslet pravicově a naopak nebo jako se Babiš nedokáže naučit myslet demokraticky. Máte ze statických jazyků spoustu 'zlozvyků', které vám v Pythonu nejen že nic nepřináší, naopak vám jen komplikují život. Jste toho s vašimi potížemi nádhernou živoucí ukázkou. Zkuste si představit, že bych já naopak chtěl programovat v Javě a vyžadoval důsledně, aby všechny proměnné měly dynamické typy, a další zvyky, na které jsem zvyklý z Pythonu. Těžce by to skřípalo, byl bych z toho akorát nešťastný. Nebyl bych v ní schopen dělat velké pojekty, narážel bych na nedynamické knihovny, a tak dále. Vše co tady popisujete. Ale byla by to chyba Javy nebo nesprávného používání?
Doporučuji vám návrat ke statickým jazykům, buďe to méně bolestivé, než pochopit nové paradigma, dynamický jazyk a jak v něm programovat, naučit se myslet dynamicky. Toto doporučení je tím víc silnější, čím hlubší máte Thinking in (C|C++|Java|...).
Máte pocit, že jste zkušení vývojáři, že programování rozumíte, ale mýlíte se, v dynamickém programování jste záčátečnící a vyvíjet dynamicky neumíte. A jste na tom ve skutečnosti ještě hůř než ty začátečníci, protože ti k tomu přistupují s čistou otevřenou myslí, bez předpojatosti, předsudků a naučených 'osvědčených' postupů, jenž jsou ve světě Pythonu zlozvyky.
Začátečníci nepotřebují přeformátovat způsob programátorského myšlení jako vy. Když se naučíte myslet dynamicky, pochopíte, že type hinty a podobné věci nepotřebujete, že je to u dynamického jazyku chodítko pro malé děti a chodit se dá i bez něj. A dokonce i běhat (což jsou ty velké projekty, které si v pythonu neumíte představit, přestože kolem vás reálně existují), což s chodítkem nejde.
Pokud chcete začít myslet a programovat dynamicky, zapomeňte na všechno ci umíte a na všechy nástroje, které používáte. Zapomeňte na ide, které programuje za vás a mění vám současně třicet zdrojáků, přestaňte spoléhat na tyto berličky. Vezměte si obyčejný textový editor, stačí aby uměl odsazovat a zvýrazňovat syntaxi. Pokud bude umět i folding a při uložení souboru jej prožene pylintem, bude to luxus.
Ano, ztratíte produktivitu, ale tu začátečníci prostě nemají, teprve se učí, objevují. Místo toho začněte přemýšlet, jak to udělat, abyste se bez berliček, na které nyní spoléháte (ať v ide nebo jazyce), obešli. Začněte o programování přemýšlet jinak, dynamicky. Využívejte silných vlastností, které vám Python dává, nepotlačujte je, přjměte je a naplno využijte.
Bude to těžké, změna myšlení bolí, ale jde to. A pokud to zvládnete, stanete se lepšími programátory, programátory, kteří se na věci umí dívat různě a problémy řešit různým způsbem. Zjistíte, že nepotřebujete ani statické typy ani automatický refactoring, což jsou myslím spojené nádoby, protože i drobné změny ve statickém návrhu vyžadují rozsáhlé změny kódu. Pak teprve objevíte a pochopíte krásu jazyka Python.
Pokud to chcete mít jednoduché, prostě se vraťte do světa statického programování, který už znáte a zapomeňte na Python. Je to hodně flexibilní jazyk, ale statický z něj prostě neuděláte, s tím narazíte. Na statické programování programování to vážně není dobrý nástroj.