Python - zbožňovaný lidmi?

dustin

Re:Python - zbožňovaný lidmi?
« Odpověď #285 kdy: 13. 12. 2017, 17:34:49 »
Jasně... Doporučuji změnit IDE, když zvolíte správně, nejspíše změníte i váš názor, protože u vás nevidím výtky na Python, ale na IDE, které přenášíte na jazyk.

Rád se nechám poučit, které bude v tomto ohledu dokonalejší. Prosím o návrhy vycházející z praktických zkušeností.


gll

Re:Python - zbožňovaný lidmi?
« Odpověď #286 kdy: 13. 12. 2017, 17:39:04 »
Jasně... Doporučuji změnit IDE, když zvolíte správně, nejspíše změníte i váš názor, protože u vás nevidím výtky na Python, ale na IDE, které přenášíte na jazyk.

Rád se nechám poučit, které bude v tomto ohledu dokonalejší. Prosím o návrhy vycházející z praktických zkušeností.

Podle autorů mypy funguje v některých ohledech lépe než PyCharm.

https://github.com/python/mypy/issues/3053

dustin

Re:Python - zbožňovaný lidmi?
« Odpověď #287 kdy: 13. 12. 2017, 17:40:53 »
pro přetypování existuje funkce cast. Mypy jí rozumí, nevím jak PyCharm.

Díky, cast funguje dobře.

dustin

Re:Python - zbožňovaný lidmi?
« Odpověď #288 kdy: 13. 12. 2017, 17:48:18 »
ty cyklické importy jsou úplně zbytečné. Tvrdohlavě dáváte každou třídu do vlastního souboru jako v Javě i když vám to komplikuje život.

Nedávám každou třídu, ale jen ty větší. Nebudu kvůli hloupým problémům s importy vytvářet obrovský soubor, jako je např. https://github.com/dddomodossola/remi/blob/master/remi/gui.py

Nejvíce problémů vzniká při používání nových nekomentářových typehintů. Co jsem viděl, tak většina projektů tento problém nemá, protože jednoduše žádné typehinty nepoužívá. To ovšem není řešení, ale znouzecnost.

dustin

Re:Python - zbožňovaný lidmi?
« Odpověď #289 kdy: 13. 12. 2017, 17:57:17 »
On má problém s cyklickými importy, protože předkům předává typ potomka. To se nepoužívá ani v Javě. Nevím, kde na to přišel.

Ale houby, jsou to normální závislosti tříd, které nejsou v rodičovském vztahu. Akorát v jednom souboru to funguje, zatímco ve dvou na sebe bez importu nevidí a vznikne cyklický import. Řeší se to workaroundem tak, že se konfliktní prvek vytáhne do třetího souboru. U typehintů naštěstí jednodušeji tak, že se typehint uvede do apostrofů a pro IDE se příslušný import dá do podmínky if TYPE_CHECKING, kterou nemá interpret nastavenou. Opět zjistíš až po spuštění.

Zajímalo by mě, kolik máš s typehinty zkušeností. Vsadil bych se, že je jako skoro každý "kovaný" pythonista z historických i jiných důvodů nepoužíváš. A opravdu mě nikdo nepřesvědčí, že je bez nich kód přehlednější a rychlejší na vývoj.  To nemá s javou nic společného.


dustin

Re:Python - zbožňovaný lidmi?
« Odpověď #290 kdy: 13. 12. 2017, 18:01:41 »
Podle autorů mypy funguje v některých ohledech lépe než PyCharm.

Mluvím o IDE, jaké IDE používá mypy přímo při psaní kódu? Informace o špatném názvu metody po napsání kódu a kontrole mypy je sice lepší, než až po spuštění, ale pořád to není postup, který by měl něco společného s efektivním vývojem složitějšího projektu.

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #291 kdy: 13. 12. 2017, 18:08:33 »
Podle autorů mypy funguje v některých ohledech lépe než PyCharm.

Mluvím o IDE, jaké IDE používá mypy přímo při psaní kódu? Informace o špatném názvu metody po napsání kódu a kontrole mypy je sice lepší, než až po spuštění, ale pořád to není postup, který by měl něco společného s efektivním vývojem složitějšího projektu.

mypy je integrované ve flake8 i v Python Language Server.

používá ho třeba VS Code.

dustin

Re:Python - zbožňovaný lidmi?
« Odpověď #292 kdy: 13. 12. 2017, 18:21:41 »
A to funguje tak, že napíšu naslepo kód, zmáčknu klávesovou zkratu a z výpisu se dozvím, kde jsem se seknul v názvu proměnné/metody/typu parametru atd.? Nebo je to integrované a opravdu to pomáhá přímo při psaní kódu, nabízí a doplňuje typově správné parametry, hned zvýrazňuje chybné/neznámé názvy, varuje před nekompatibilními typy atd., jak je standardní funkcí IDE vč. Pycharmu?

ByCzech

  • *****
  • 1 857
    • Zobrazit profil
    • E-mail
Re:Python - zbožňovaný lidmi?
« Odpověď #293 kdy: 13. 12. 2017, 18:35:41 »
@gll:

Co kdybychom šli programovat v Javě a aplikovali bychom tam zvyky z Pythonu a pak se děsně čílili jak je ta Java pitomá? :D

On má problém s cyklickými importy, protože předkům předává typ potomka. To se nepoužívá ani v Javě. Nevím, kde na to přišel.

Já myslel třeba to "co třída to soubor"...

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #294 kdy: 13. 12. 2017, 18:36:05 »
A to funguje tak, že napíšu naslepo kód, zmáčknu klávesovou zkratu a z výpisu se dozvím, kde jsem se seknul v názvu proměnné/metody/typu parametru atd.? Nebo je to integrované a opravdu to pomáhá přímo při psaní kódu, nabízí a doplňuje typově správné parametry, hned zvýrazňuje chybné/neznámé názvy, varuje před nekompatibilními typy atd., jak je standardní funkcí IDE vč. Pycharmu?

nemusíte mačkat klávesovou zkratku. Běží to jako server na pozadí a reaguje na každou změnu.

PyCharm integruje flake8 také. Zkuste si to zapnout.

https://foxmask.trigger-happy.eu/post/2016/02/17/pycharm-running-flake8/

dustin

Re:Python - zbožňovaný lidmi?
« Odpověď #295 kdy: 13. 12. 2017, 19:23:03 »
Postupoval jsem přesně podle návodu a opravdu nechápu, v čem by mi to mělo pomoci více než integrovaný lint v PyCharmu.

Vůbec to není interaktivní, prostě napíšu kód, z lokálního menu spustím flake8 (--max-complexity 10, jak bylo v tutoriálu), vidím, co je blbě. Ta integrace ani nedělá klikací skok na řádek, je to jenom výpis do konzole.

Bohužel to vůbec nekontroluje typehinty (možná se to musí nějak zapnout). V takto triviální metodě

Kód: [Vybrat]
    def _isLeaf(self, path: Path) -> bool:
        return path.is_file() or not hasSubitems(path)

změním hint na str:

Kód: [Vybrat]
    def _isLeaf(self, path: str) -> bool:
        return path.is_file() or not hasSubitems(path)

Pycharm samozřejmě hned podtržením označí is_file a parametr hasSubitems(path) jako chybu, protože str nemá is_file() a nepasuje do hasSubitems(path: Path). flake8 si toho vůbec nevšimne.  A to navíc je _isLeaf implementace abstrakní metody _isLeaf(PATH), kde PATH je generická a nadefinovaná v této třídě jako třída Path. O tom flake8 vůbec netuší (což Pycharm bohužel také ne, ač je to jasně v definici třídy napsané "class FileSource(MPVTreeSource[Path])"). Pokud někdo považuje generika jako javovský styl, pak s ním není moc co řešit, pro typový popis je něco takového zásadní.

_isLeaf jsem smazal, flake8 vůbec nezdetekoval chybějící implementaci abstraktní metody (označená přes @abc.abstractmethod). Pycharm to hned samozřejmě označí a přes Alt+Enter nabízí implementaci všech chybějících abstrakních metod, jako standardní IntelliJ.

Stejně jako flake8 nepochopil ifovaný import a řve "F401 'dispatcher.Dispatcher' imported but unused", přestože je Dispatcher v typehintu.

Sorry, ale tohle nemá s usnadněním vývoje v IDE nic společného.

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #296 kdy: 13. 12. 2017, 19:32:43 »
nejspíš musíte mít nainstalovaný plugin flake8-mypy. Nevím, jestli to v PyCharmu stojí za námahu.

refactoring

Re:Python - zbožňovaný lidmi?
« Odpověď #297 kdy: 13. 12. 2017, 20:01:09 »
OMG, všichni ví, že Python refactoring neumí, tak nevím, co pořád řešíte. Dustine, nedělej lopatu. V Javě se mění při jedné změně rozhraní třeba 400 souborů a nikdo neřeší, jestli je to dobře. Protože prostě je. V Pythonu bys půlku projektu musel začít projíždět ručně jak v roce 1980 :D Je to jazyk pro patlaly, kteří programovat neumí.

dustin

Re:Python - zbožňovaný lidmi?
« Odpověď #298 kdy: 13. 12. 2017, 20:01:34 »
A to pak mypy pozná chybný typehint, chybějící abstraktní metodu, nesoulad s generikem atd.? IMO tam poběží pořád to samé mypy a bude kontrolovat ten samý zdroják, akorát to třeba bude jinak propojené.

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #299 kdy: 13. 12. 2017, 20:09:17 »
A to pak mypy pozná chybný typehint, chybějící abstraktní metodu, nesoulad s generikem atd.? IMO tam poběží pořád to samé mypy a bude kontrolovat ten samý zdroják, akorát to třeba bude jinak propojené.

ja myslim, ze PyCharm ma nejakou vlastni implementaci. Muze fungovat rozdilne. Kazdopadne s https://github.com/pavhofman/aio/blob/master/sources/treesource.py#L41 vam nepomuze nic.

Ty generiky nevim.