Jistěže lze kdykoliv zjistit typ objektu. Bohužel to pak dopadá třeba takhle
https://github.com/dddomodossola/remi/blob/master/remi/gui.py#L1914 . V javě (a spoustě jiných jazyků) by se v této situaci (pokud bych to nechtěl celé postavit jinak, víc objektově) udělalo více metod append s různými vstupními parametry (Map, Collection, Widget) a každá by se chovala jinak. Jak to udělat v pythonu? Udělat metody appendDict, appendCollection, appendWidget? Nebo jednu metodu, která ale ve skutečnosti dělá pomocí if elseif... tři různé věci, jak je to v ukázce.
Nicméně samozřejmě nesouhlasím, že by se java neměla od pythonu co učit. Chybějící mixiny jsou zásadní nedostatek, o který zakopávám v jednom kuse. A defaultní metody interfaců to zdaleka neřeší, protože jsou public a interfacy nemají vnitřní proměnné. Tuples by se sakra hodily. Rovněž nemožnost volat kód s checkovanými výjimkami ve streamu je zásadní omezení modernizace legacy kódu. Končí to obalováním bloků runtime výjimkami, což je zbytečný balast. Python to v generátorech neřeší, příjemně se používají.
Na druhou stranu chápu, že java musí držet nějakou kompatibilitu a přidávání nových vlastností není úplně jednoduché. Přechod python2 -> python3 byl úplně špatně, to mi nikdo nevymluví. Ale i java má své problémy, technické změny v javě 9 zasekly spoustu projektů na osmičce (nepočítám-li změnu licence).
O kvalitě vývoje v enterprise si nedělám iluze :-)