Já bych chtěl vysvětlení té beztypovosti (různé zdroje se v této interpretaci liší); a kdyby to rozsekl Radek Miček bylo by to fajn .)
Co na tom chceš rozsekávat? Pythonovský objekt je v principu jenom slovník (podobně jako v Javascriptu nebo Lua) s tím, že některé klíče mají speciální význam. Konkrétně třeba nás tady může zajímat atribut
__dict__. A to je vše. Na tom je to celé postavené. Můžu si vytvořit prázdný objekt (bez metod) a pak si do něj přidat metody jaké budu chtít. Jaký by to potom měl být typ? Žádný, v takovém prostředí pojem typ de facto neexistuje. Smysluplně se dá mluvit jenom o tom, jestli daný objekt splňuje nebo nesplňuje nějaký protokol/rozhraní (tj. disponuje
v dané chvíli nějakou množinou metod). Ale pokud bych to chtěl opravdu korektně checkovat, musím to dělat za běhu.
Samozřejmě si můžu vymyslet, že nějaké další atributy budou mít nějaký další speciální význam. Například do nějakého atributu uložím referenci na něco, čemu začnu říkat "třída" a od té doby už z toho slovníku mám s trochou bižuterie "instanci"
Ironií osudu je takhle postavené OOP bližší té původní myšlence (SmallTalk) než C++ nebo java
Úplně stejně, jako v ostatních jazycích, když metoda požaduje jako vstupní parametr třeba číslo měsíce (1..12) a někdo do ní chce narvat třeba 42. Má na to třeba Java datový typ? Nemá. Použiješ int a ošetříš si to vlastním kódem.
V Pythonu se to dá ošetřit pomocí dekorátoru.
Přesně tak. A ani nemusíme jít tak daleko, stačí nám obyčejný null
Jestli se někdo ptá, jak to hergot pythonisti dělají, aby jim to nepadalo na to, že někam místo stringu dají int, tak odpověď je "dělají to v principu podobně jako javisti zabezpečují, aby jim to nepadalo na NullPointerException"
Jinak ale mimo flame k tématu: ví někdo, jak použitelné to typování v Pythonu 3 je? Např. kolik kódu std. knihovny je pokryto typy? Jak kvalitní jsou nástroje pro statickou analýzu?
V Erlangu taky typy de facto nejsou, ale dá se použít buť velice silné "manuální typování" (místo čísla dám dvojici
{number_of_seconds_since_mireks_birth, 2453461}) nebo typové anotace + docela kvalitní statická analýza (dialyzer). Plus má teda Erlang oproti Pythonu výhodu v tom, že má excelentní podporu pro práci s chybovými stavy. To Python jenom těžko může dohnat, ale tu statickou analýzu by mohl mít snad poměrně dobrou...